如何?Https上的WCF自定义绑定
我正在尝试在我们面向外部的web场上设置一个供内部使用的WCF服务(我们内部没有web场,我需要这个服务来进行故障切换和负载平衡) 要求:如何?Https上的WCF自定义绑定,wcf,binding,https,Wcf,Binding,Https,我正在尝试在我们面向外部的web场上设置一个供内部使用的WCF服务(我们内部没有web场,我需要这个服务来进行故障切换和负载平衡) 要求: PerSession状态,因为我们需要服务为每个会话保留可变数据 HTTPS。在谷歌搜索了很多内容后,我读到我需要创建一个customBinding,我已经完成了,但不确定它是否正确 更大的消息大小,因为其中一个参数是byte[]数组,最大为5mb 不需要手动编辑客户端app.config。也就是说,我需要开发人员只添加服务引用,然后开始使用该对象,而不需
- PerSession状态,因为我们需要服务为每个会话保留可变数据
- HTTPS。在谷歌搜索了很多内容后,我读到我需要创建一个customBinding,我已经完成了,但不确定它是否正确
- 更大的消息大小,因为其中一个参数是byte[]数组,最大为5mb
- 不需要手动编辑客户端app.config。也就是说,我需要开发人员只添加服务引用,然后开始使用该对象,而不需要对app.config进行任何修改
<system.serviceModel>
<services>
<service name="AppMonitor.AppMonitorWcfService" behaviorConfiguration="ServiceBehavior">
<endpoint address="" binding="customBinding" bindingConfiguration="EnablePerSessionUnderHttps" contract="AppMonitor.IAppMonitorWcfService"/>
<endpoint address="mex" binding="mexHttpsBinding" contract="IMetadataExchange" />
</service>
</services>
<bindings>
<customBinding>
<binding name="EnablePerSessionUnderHttps" maxReceivedMessageSize="5242880">
<reliableSession ordered="true"/>
<textMessageEncoding>
<readerQuotas maxDepth="64" maxStringContentLength="2147483647" maxArrayLength="2147483647" maxBytesPerRead="4096" maxNameTableCharCount="16384" />
</textMessageEncoding>
<httpsTransport authenticationScheme="Anonymous" requireClientCertificate="false"/>
</binding>
</customBinding>
</bindings>
<behaviors>
<serviceBehaviors>
<behavior name="ServiceBehavior">
<serviceMetadata httpsGetEnabled="true" httpGetEnabled="false"/>
<serviceDebug includeExceptionDetailInFaults="true"/>
</behavior>
</serviceBehaviors>
</behaviors>
</system.serviceModel>
EXE的App.config(添加服务引用时自动生成):
我不确定app.config为什么显示wsHttpBinding?这不应该是定制的吗?
我真的不想编辑app.config,因为这项服务将被几十个开发人员使用,我希望他们能够添加服务引用,然后他们就离开了
使用VS2008、.NET3.51。
我认为服务器是IIS7,Win server 2008,如果需要可以确认。好的,您的问题是您没有为您的服务定义地址。记住端点的ABC:地址绑定契约 您需要为服务定义一个地址,该地址基本上由.svc文件控制,并且可以从IIS浏览该文件。无论该.svc文件的URL是什么,您都会附加您定义的地址(在本例中为空字符串),然后将其添加到顶部。因此,如果我将myservice.svc文件放在根目录中,它将变为
https://localhost/myservice.svc/
在您的情况下,ServiceAddress=“
所以URL是https://localhost/myservice.svc/
有关更多信息,请参阅。web.config中有一个地址,因此我假设您的意思是客户端app.config中缺少该地址?为什么它不见了?我所做的只是在addservicereference选项中键入相同的URL(我可以浏览并查看WSDL页面),然后它找到了服务。然后我键入一个名称空间,单击GO,就这样了。这就是我过去做WCF的方式。你知道为什么它没有把地址放在app.config中吗?好的,很明显问题是客户端app.config的标签下没有任何信息。我知道,我需要知道a)为什么在执行“添加服务引用”时没有自动填充;b) 如何让它自动填充?c) 或者,更改web.config绑定或其他内容,使其像之前一样自动填充。使用我们的服务的开发者不必编辑他们的app.configs来使用此服务,这是必须的。他们应该能够在addservicereference中输入URL,然后开始使用该服务。谢谢你的帮助!注意:我读到我必须从这篇文章中创建一个customBinding:。我还了解到,我遇到的端点详细信息未填充到clients app.config的问题是由于绑定问题(但没有提供解决方案)。我是否可以使用wsHttpBinding(或其他?),并且仍然可以通过https使用PerSession上下文?
<configuration>
<system.serviceModel>
<bindings>
<wsHttpBinding>
<binding name="CustomBinding_IAppMonitorWcfService" 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="65536"
messageEncoding="Text" textEncoding="utf-8" useDefaultWebProxy="true"
allowCookies="false">
<readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384"
maxBytesPerRead="4096" maxNameTableCharCount="16384" />
<reliableSession ordered="true" inactivityTimeout="00:10:00"
enabled="true" />
<security mode="Transport">
<transport clientCredentialType="None" proxyCredentialType="None"
realm="" />
<message clientCredentialType="Windows" negotiateServiceCredential="true"
establishSecurityContext="true" />
</security>
</binding>
</wsHttpBinding>
</bindings>
<client />
</system.serviceModel>
</configuration>