1

我正在使用 VSTS 2008 + C# + .Net 3.0。我正在使用自托管的 WCF。执行以下语句(host.Open())时,出现以下绑定未找到错误。我已经发布了我的整个 app.config 文件,有什么想法有什么问题吗?

ServiceHost host = new ServiceHost(typeof(MyWCFService));
host.Open();

错误信息,

无法解析属性“algorithmSuite”的值。错误是:值“Aes128”不是“System.ServiceModel.Security.SecurityAlgorithmSuite”类型的有效实例。

EDIT1:我已将算法套装选项值更改为默认值,但在执行 Open() 时遇到了一个新错误,错误消息是,任何想法有什么问题,

绑定验证失败,因为 WSHttpBinding 不支持基于传输安全 (HTTPS) 的可靠会话。无法打开通道工厂或服务主机。使用消息安全性通过 HTTP 进行安全可靠的消息传递。

完整的 app.config,

<?xml version="1.0"?>
<configuration>
  <system.serviceModel>
    <bindings>
      <wsHttpBinding>
        <binding name="MyBinding"
            closeTimeout="00:00:10"
            openTimeout="00:00:20"
            receiveTimeout="00:00:30"
            sendTimeout="00:00:40"
            bypassProxyOnLocal="false"
            transactionFlow="false"
            hostNameComparisonMode="WeakWildcard"
            maxReceivedMessageSize="100000000"
            messageEncoding="Mtom"
            proxyAddress="http://foo/bar"
            textEncoding="utf-16"
            useDefaultWebProxy="false">
          <reliableSession 
               enabled="false" />
          <security mode="Transport">
            <transport clientCredentialType="Digest"
               proxyCredentialType="None"
               realm="someRealm" />
            <message clientCredentialType="Windows"
           negotiateServiceCredential="false"
           algorithmSuite="Default"/>
          </security>
        </binding>
      </wsHttpBinding>
    </bindings>
    <services>
      <service name="MyWCFService"
                behaviorConfiguration="mexServiceBehavior">
        <host>
          <baseAddresses>
            <add baseAddress="https://localhost:9090/MyService"/>
          </baseAddresses>
        </host>
        <endpoint address="" binding="wsHttpBinding" bindingConfiguration="MyBinding" contract="IMyService"/>
        <endpoint address="mex" binding="mexHttpsBinding" contract="IMetadataExchange" />
      </service>
    </services>
    <behaviors>
      <serviceBehaviors>
        <behavior name="mexServiceBehavior">
          <serviceMetadata httpsGetEnabled="True"/>
        </behavior>
      </serviceBehaviors>
    </behaviors>
  </system.serviceModel>
<startup><supportedRuntime version="v2.0.50727"/></startup></configuration>

提前谢谢,乔治

4

2 回答 2

3

如果您将 MEX 端点从 http 更改为 https,您还需要更新服务行为 - 您需要启用httpsGetEnabled设置(而不是 httpGetEnabled):

   <behaviors>
      <serviceBehaviors>
        <behavior name="mexServiceBehavior">
          <serviceMetadata httpsGetEnabled="True"/>
        </behavior>
      </serviceBehaviors>
    </behaviors>

更新
George,看看这个MSDN 链接——没有“Aes128”算法——你必须选择现有的算法之一。

更新 2:

你可以试试这个配置 - 减少到最大!:-)

  <system.serviceModel>
    <bindings>
      <wsHttpBinding>
        <binding name="MyBinding"
            maxReceivedMessageSize="100000000"
            messageEncoding="Mtom"
            proxyAddress="http://foo/bar"
            textEncoding="utf-16"
            useDefaultWebProxy="false">
          <reliableSession enabled="false" />
          <security mode="None" />
        </binding>
      </wsHttpBinding>
    </bindings>
    <services>
      <service name="MyWCFService"
                behaviorConfiguration="mexServiceBehavior">
        <host>
          <baseAddresses>
            <add baseAddress="https://localhost:9090/MyService"/>
          </baseAddresses>
        </host>
        <endpoint address="" binding="wsHttpBinding" bindingConfiguration="MyBinding" contract="IMyService"/>
        <endpoint address="mex" binding="mexHttpsBinding" contract="IMetadataExchange" />
      </service>
    </services>
    <behaviors>
      <serviceBehaviors>
        <behavior name="mexServiceBehavior">
          <serviceMetadata httpsGetEnabled="True"/>
        </behavior>
      </serviceBehaviors>
    </behaviors>
  </system.serviceModel>

你能启动你的服务,你能从 Visual Studio 添加服务引用吗?

更新 3
George,我建议您查看那些与安全相关的链接,并了解您真正需要和想要的东西 - 以及如何实现它。

马克

于 2009-06-22T09:19:14.553 回答
2

错误消息是正确的,您无法通过 WSHttp 获得可靠消息,您需要使用自定义绑定和协议

于 2009-06-22T09:47:31.033 回答