WCF绑定选择器算法
我在TechEd会议上观看了一次演讲,其中展示了一种选择WCF绑定的简单算法.我找不到这个算法,但我记得一些主要的想法:
任何人都可以提供该算法完整版的链接吗?
该类BasicHttpBinding有一个ReaderQuotas属性,您可以访问该属性来覆盖MaxArrayLength、MaxBytesPerRead等属性。
当使用a 中的a而不是 时,如何才能ReaderQuotas实现相同的目标?HttpTransportBindingElementCustomBindingBasicHttpBinding
IE:
var bindingElement = new HttpTransportBindingElement();
bindingElement.MaxBufferSize = 65536; // works
bindingElement.ReaderQuotas.MaxArrayLength = 65536; // error no ReaderQuotas member
var binding = new CustomBinding(bindingElements);
binding .ReaderQuotas.MaxArrayLength = 65536; // also no ReaderQuotas member
Run Code Online (Sandbox Code Playgroud)
在此先感谢您的帮助。
当我访问Tridion核心服务URL时:http://tridion_ip/webservices/CoreService2011.svc我收到运行时错误.我直接从CMS服务器访问URL.
找不到与端点的方案https匹配的基址
当我查看IIS时,我可以看到/ webservices /目录显示以下Core Service文件:
我应该在该地址看到一个Web服务页面吗?或者这是预期的?
编辑: Out安全元素如下:
<wsHttpBinding>
<binding name="CoreService_wsHttpBinding" transactionFlow="true" maxReceivedMessageSize="10485760">
<readerQuotas maxStringContentLength="10485760" maxArrayLength="10485760" />
<!--
<security mode="Message">
<message clientCredentialType="Windows" />
</security>
-->
<!-- For LDAP authentication of message credentials, use the following settings: -->
<security mode="TransportWithMessageCredential">
<message clientCredentialType="UserName" />
</security>
</binding>
Run Code Online (Sandbox Code Playgroud)
我正在使用流式传输模式的WCF绑定,用于向服务上载和从服务下载二进制内容.我设法让它运作起来.我将包括配置,合同等以供参考.
我做了一些测试来测试不同的绑定和编码.上传结果似乎没问题.NetTcp是最快的,其次是BasicHttp-MTOM,然后是BasicHttp-Text.让我感到惊讶的是,在下载大文件时,与使用BasicHttp的文本编码和使用NetTcp的二进制编码相比,MTOM非常慢.
我错过了什么吗?为什么在上传时BasicHttp-MTOM的工作速度比其他绑定慢?除此之外,我还为下载实现了双缓冲.除了带有MTOM编码的BasicHttp之外,这也适用于所有绑定.为什么使用MTOM时双缓冲无效?
感谢您的阅读,您对此的建议和想法.
检测结果:
将150 MB二进制数据上载到服务.客户端从150 MB文件创建文件流并传递给服务器.服务器将流读入内存流.还没有双重缓冲.由于没有向文件系统写入数据,因此结果似乎很快.并且绑定按预期执行.

从服务下载100 MB二进制数据.服务创建内存流并传递给客户端.客户端写入文件系统.以下是单缓冲区和双缓冲区的结果.正如您所看到的,MTOM似乎非常慢,并且也不响应双缓冲.

服务器配置(为简单起见省略了一些部分):
<configuration>
<system.web>
<httpRuntime maxRequestLength="2147483647"/>
</system.web>
<system.serviceModel>
<bindings>
<netTcpBinding>
<binding name="StreamedNetTcpBinding"
transferMode="Streamed"
maxReceivedMessageSize="1099511627776">
</binding>
</netTcpBinding>
<basicHttpBinding>
<binding name="StreamedBasicHttpBindingWithMtom"
messageEncoding="Mtom" transferMode="Streamed"
maxReceivedMessageSize="1099511627776">
</binding>
<binding name="StreamedBasicHttpBinding"
transferMode="Streamed"
maxReceivedMessageSize="1099511627776">
</binding>
</basicHttpBinding>
</bindings>
</system.serviceModel>
</configuration>
Run Code Online (Sandbox Code Playgroud)
客户端配置(为简单起见省略了一些部分):
<configuration>
<system.serviceModel>
<bindings>
<basicHttpBinding>
<binding name="StreamedBasicHttpBindingWithMtom"
maxReceivedMessageSize="1099511627776"
messageEncoding="Mtom" transferMode="Streamed">
</binding>
<binding name="StreamedBasicHttpBinding"
maxReceivedMessageSize="1099511627776"
transferMode="Streamed">
</binding>
</basicHttpBinding>
<netTcpBinding>
<binding name="StreamedNetTcpBinding" transferMode="Streamed"
maxReceivedMessageSize="1099511627776">
</binding>
</netTcpBinding>
</bindings>
</system.serviceModel>
</configuration>
Run Code Online (Sandbox Code Playgroud)
服务合约:
[ServiceContract]
public interface IFileService
{
[OperationContract]
void UploadFile(DocumentData document);
[OperationContract]
DocumentData …Run Code Online (Sandbox Code Playgroud) 当我尝试调用Adobe Livecyle Soap服务时出现以下错误:
值不能为空.参数名称:uri
奇怪的是我没有任何名为"uri"的参数.我无法调试此错误,因为服务甚至无法启动.错误消息是我所有的.
这是代码,我传递参数:
BasicHttpBinding binding =
new BasicHttpBinding(BasicHttpSecurityMode.Transport);
binding.Security.Transport.ClientCredentialType = HttpClientCredentialType.Basic;
LetterService.LETTER_APPLICATIONS_Client client =
new LetterService.LETTER_APPLICATIONS_Client(
binding,
new EndpointAddress(
System.Configuration.ConfigurationManager.AppSettings["URL"]));
Run Code Online (Sandbox Code Playgroud) 我在与Java WS交谈时遇到了问题.我正在使用"wsHttpBinding"绑定客户端证书进行身份验证,消息编码设置为"Text",.net framework为4.0.服务器端是Java,我无法控制它.通过Fiddler代理连接(这是我在线路上看到请求的方式,比跟踪"System.Net"更加用户友好).
我得到的例外情况如下:
内容类型application/xop + xml; 响应消息的type ="application/soap + xml"与绑定的内容类型(application/soap + xml; charset = utf-8)不匹配.
如果我将消息编码更改为"Mtom",则异常会更改:
内容类型application/xop + xml; 响应消息的type ="application/soap + xml"与绑定的内容类型不匹配(multipart/related; type ="application/xop + xml").
服务器正在接受请求的"文本"和"Mtom"消息编码,并且响应始终相同.这是我从服务器获得的原始响应:
HTTP/1.1 200 OK
X-Backside-Transport: OK OK
Connection: Keep-Alive
X-Powered-By: Servlet/3.0
SOAPAction: ""
Content-Type: application/xop+xml; type="application/soap+xml"
Content-Language: en-US
Date: Thu, 25 Jul 2013 13:05:09 GMT
Content-Length: 628
<?xml version="1.0" encoding="UTF-8"?>
<env:Envelope ... </env:Envelope>
Run Code Online (Sandbox Code Playgroud)
从我读过的所有文档中,返回的响应介于常规SOAP消息和MTOM消息之间.我这样说是因为我看到的每个例子都说MTOM请求和响应使用MIME作为通信信封:常规SOAP消息被封装在XOP包中,然后这个XOP消息被MIME封装.甚至W3C推荐也使用MIME for XOP包:W3C:XML-binary Optimized Packaging.摘自此链接:
Content-Type: Multipart/Related;boundary=...
Run Code Online (Sandbox Code Playgroud)
如果我尝试使用工具"soapUI"(用Java编写,可从"www.soapui.org"获得)调用Web服务,则服务调用成功执行并且解析响应没有任何问题.
仅供参考,这是来自MSDN WCF论坛的交叉帖子,但还没有回复.
任何想法都表示赞赏,在此先感谢,
亚历克斯
我目前正在开发一个小项目,我需要通过互联网发送一个可能很大的文件.
经过一番辩论后,我决定选择流媒体选项,而不是采用分块方法.文件可能非常大,我真的不想指定一个确切的上限,2GB可能是4GB,谁知道.
当然这可能需要很长时间.我再也不想暂停.它只需要花费多长时间,无所谓.
在尝试不同大小的不同文件时,我慢慢地,一步一步地调整我的BasicHttpBinding的属性.我只是想知道我想出的价值观是否基本没问题,或者它们是否完全是邪恶的?
transferMode="Streamed"
sendTimeout="10675199.02:48:05.4775807"
receiveTimeout="10675199.02:48:05.4775807"
openTimeout="10675199.02:48:05.4775807"
closeTimeout="10675199.02:48:05.4775807"
maxReceivedMessageSize="9223372036854775807"
Run Code Online (Sandbox Code Playgroud)
这只是感觉不对,这些只是每个底层数据结构的最大可能值.但我不知道还能做什么.
再说一次:
这基本上是正确的方法吗?或者我在这里完全误解和滥用框架?
谢谢
我已经创建了一个使用WCF进行通信的Windows服务.应该只能从同一台机器上调用该服务.如果我可以保证没有办法从另一台机器与它通信,我可以认为它是安全的.
由于我在一台机器上使用通信,因此我选择使用NetNamedPipeBinding.这个绑定文档说它针对机上通信进行了优化,但没有给出任何保证.
我的问题是,NetNamedPipeBinding是否提供仅限机器的保证?如果不是什么绑定,或者你将如何实现提供这种保证的自定义绑定?
谢谢,
阿萨夫
我有一个带有HTTP Bindings的WCF服务.AppConif文件maxDepth ="32".这适用于除ONE之外的所有机器.
我的问题是,当maxDepth ="32"时,为什么这不适用于这台机器.
当我设置maxDepth ="2147483647"时,它适用于所有机器.
感谢您的帮助!
以下绑定使用了什么加密算法和密钥长度?
NetTcpBinding binding = new NetTcpBinding();
binding.Security.Mode = SecurityMode.Transport;
binding.Security.Transport.ClientCredentialType = TcpClientCredentialType.Windows;
Run Code Online (Sandbox Code Playgroud) wcf ×10
wcf-binding ×10
c# ×3
.net ×2
mtom ×2
.net-4.0 ×1
binding ×1
livecycle ×1
named-pipes ×1
net.tcp ×1
soap ×1
streaming ×1
tridion ×1
wcf-security ×1
xop ×1