我在Web应用程序中调用Web服务时遇到了一些麻烦,我希望这里有人能够提供帮助。 据我所知,这似乎与Kerberos 双跳问题有关 。 但是,如果是这样,我不知道该怎么做才能真正解决问题。 为了使事情更难,我没有适当的权限来更改Active Directory帐户,所以我需要知道要求更改时要求什么。 在我的情况下,我需要将凭据(集成Windows身份validation)从Web应用程序传递到后端Web服务,以便Web服务在适当的用户上下文下运行。 这是我的确切问题: 这工作 这不起作用 工作场景和非工作场景的唯一区别在于,工作场景在本地主机上运行应用程序(无论是开发人员的PC还是服务器上的问题),非工作的例子在另一台机器上运行。 这两种情况之间的代码是完全一样的。 我试过了 将SPN添加到为每个服务器运行应用程序池的域帐户setspn -a http/server1 DOMAIN\account 不同的模拟方法 using(…)删除模拟代码并执行Web服务调用作为应用程序池帐户。 这按预期工作。 有没有人有任何想法,我可以做什么,以解决这个问题?
我有一个自托pipe的WCF服务(v4框架),通过基于HttpTransport的自定义绑定公开。 该绑定使用了一个自定义的MessageEncoder ,它几乎是一个BinaryMessageEncoder ,并增加了gzip压缩function。 Silverlight和Windows客户端使用Web服务。 问题 :在某些情况下,服务必须返回非常大的对象,偶尔在响应多个并发请求时(即使任务pipe理器报告进程为〜600 Mb),抛出OutOfMemoryexception。 自定义编码器发生exception时,消息即将被压缩,但我相信这只是一个症状,而不是原因。 例外情况是“未能分配x Mb”,其中x为16,32或64,而不是过大的数额 – 因此,我相信其他的东西已经把这个过程放在了一些极限之前。 服务端点定义如下: var transport = new HttpTransportBindingElement(); // quotas omitted for simplicity var binaryEncoder = new BinaryMessageEncodingBindingElement(); // Readerquotas omitted for simplicity var customBinding = new CustomBinding(new GZipMessageEncodingBindingElement(binaryEncoder), transport); 然后我做了一个实验:将TransferMode从Buffered更改为StreamedResponse (并相应地修改了客户端)。 这是新的服务定义: var transport = new HttpTransportBindingElement() { TransferMode = TransferMode.StreamedResponse // <– […]
如果在WCF REST调用中出现问题,例如请求的资源未find,那么我怎么能在我的OperationContract方法中使用HTTP响应代码(例如,将其设置为像HTTP 404这样的代码)呢?
我正在开发一个新项目。 使用WCF Web服务通过常规的旧时尚Web服务有什么好处? Visual Studio提供了两个模板。 有什么区别? 优点和缺点?
是否有可能将此XML反序列化为标有DataContract属性的对象? <root> <distance units="m">1000</distance> </root> 正如你可能看到有“单位”属性。 我不相信这是支持的。 还是我错了?
我从我的WCF方法返回一个列表。 在我的客户端代码中,返回types显示为MyObject []。 我必须使用MyObject []或IList或IEnumerable … WCFClient myClient = new WCFClient(); MyObject[] list = myClient.GetMyStuff(); or IList<MyObject> list = myClient.GetMyStuff(); or IEnumerable<MyObject> list = myClient.GetMyStuff(); 我正在做的是把这个集合并绑定到一个网格。 什么是最好的对象分配我返回的集合?
他们有什么区别? 我什么时候会select一个呢?
我的客户端/服务器应用程序正在使用WCF进行通信,这非常棒。 但是目前架构的一个缺点是我必须对某些传输types使用已知types的configuration。 我正在使用内部的Pub / Sub机制,这个要求是不可避免的。 问题是,忘记添加已知types很容易,如果你这样做的话,WCF会自动地失败,并且会发生什么错误的线索。 在我的应用程序中,我知道将要发送的一组types。 我想以编程方式执行configuration,而不是通过当前包含如下内容的App.config文件声明性地执行: <system.runtime.serialization> <dataContractSerializer> <declaredTypes> <add type="MyProject.MyParent, MyProjectAssembly"> <knownType type="MyProject.MyChild1, MyProjectAssembly"/> <knownType type="MyProject.MyChild2, MyProjectAssembly"/> <knownType type="MyProject.MyChild3, MyProjectAssembly"/> <knownType type="MyProject.MyChild4, MyProjectAssembly"/> <knownType type="MyProject.MyChild5, MyProjectAssembly"/> </add> </declaredTypes> </dataContractSerializer> </system.runtime.serialization> 相反,我想要做这样的事情: foreach (Type type in _transmittedTypes) { // How would I write this method? AddKnownType(typeof(MyParent), type); } 有人可以解释我怎么可以做到这一点? 编辑请理解,我试图在运行时dynamic设置已知types,而不是在configuration中使用声明或在源代码中使用属性。 这基本上是关于WCF API的一个问题,而不是一个样式问题。 编辑2 […]
我遇到了这个显然是常见的问题,一直无法解决它。 如果我调用我的WCF Web服务与一个数组中的相对较less数量的项目(我已经testing了50),一切都很好。 但是,如果我用500个项目调用Web服务,我得到错误的请求错误。 有趣的是,我已经在服务器上运行了Wireshark ,看起来这个请求甚至没有到达服务器 – 客户端正在生成400错误。 例外是: System.ServiceModel.ProtocolException: The remote server returned an unexpected response: (400) Bad Request. —> System.Net.WebException: The remote server returned an error: (400) Bad Request. 我的客户端configuration文件的system.serviceModel部分是: <system.serviceModel> <bindings> <wsHttpBinding> <binding name="WSHttpBinding_IMyService" closeTimeout="00:01:00" openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00" bypassProxyOnLocal="false" transactionFlow="false" hostNameComparisonMode="StrongWildcard" maxBufferPoolSize="524288" maxReceivedMessageSize="2147483647" messageEncoding="Text" textEncoding="utf-8" useDefaultWebProxy="true" allowCookies="false"> <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="2147483647" maxBytesPerRead="4096" […]
我有一个WCF服务,接受一个复杂的types,并返回一些数据。 我想使用Fiddler来查看对服务的传入请求是什么样的。 客户端是使用服务引用代理的.net控制台应用程序。 这可能与小提琴手。 我是这个工具的新手,并且只使用它过去用请求构build器发布数据。