代码之家  ›  专栏  ›  技术社区  ›  Markus

WCF SecurityNegotiationException尝试远程访问

  •  0
  • Markus  · 技术社区  · 14 年前

    我可以在我的Webbrowser中看到DNSService.svc?wsdl,这样我就可以访问这个站点了。但如果我在VS项目中创建一个WebReference并尝试运行WebService的方法,那么程序将在SecurityNegotiationException中运行。Messagetext说Web服务无法对调用方进行身份验证。但为什么我的通道被人吃了?我需要设置密码或者ssl之类的

    我怎样才能改变网站服务的行为,这样我就可以和他交谈了。

    <configSections>
        <sectionGroup name="userSettings" type="System.Configuration.UserSettingsGroup, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" >
          <section name="DnsClient.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" allowExeDefinition="MachineToLocalUser" requirePermission="false" />
        </sectionGroup>
      </configSections>
      <appSettings>
        <add key="UltraVNC" value="C:\Program Files (x86)\UltraVNC\vncviewer.edxe" />
        <add key="CustomerConfigsPath" value="D:\" />
      </appSettings>
      <system.serviceModel>
        <bindings>
          <wsHttpBinding>
            <binding name="WSHttpBinding_IDNSService" 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="false" />
              <security mode="Message">
                <transport clientCredentialType="Windows" proxyCredentialType="None"
                  realm="">
                  <extendedProtectionPolicy policyEnforcement="Never" />
                </transport>
                <message clientCredentialType="Windows" negotiateServiceCredential="true"
                  algorithmSuite="Default" establishSecurityContext="true" />
              </security>
            </binding>
        <client>
          <endpoint address="http://hostnotshownhere/DNSService.svc"
            binding="wsHttpBinding" bindingConfiguration="WSHttpBinding_IDNSService1"
            contract="ServiceReference1.IDNSService" name="WSHttpBinding_IDNSService">
            <identity>
              <dns value="localhost" />
            </identity>
          </endpoint>
        </client>
      </system.serviceModel>
    </configuration>
    
    1 回复  |  直到 14 年前
        1
  •  1
  •   Markus    14 年前

    问题是绑定类型!wsHTTPBinding只能在域中工作。为了在互联网上使用,我必须像那样设置HTTPBinding

    <bindings>
          <basicHttpBinding>
            <binding name="BasicHttpBinding_IDNSService" closeTimeout="00:01:00"
              openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00"
              allowCookies="false" bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard"
              maxBufferSize="65536" maxBufferPoolSize="524288" maxReceivedMessageSize="65536"
              messageEncoding="Text" textEncoding="utf-8" transferMode="Buffered"
              useDefaultWebProxy="true">
              <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384"
                maxBytesPerRead="4096" maxNameTableCharCount="16384" />
              <security mode="None">
                <transport clientCredentialType="None" proxyCredentialType="None"
                  realm=""/>
                <message clientCredentialType="UserName" algorithmSuite="Default" />
              </security>
            </binding>
          </basicHttpBinding>
        </bindings>
        <client>
          <endpoint address="http://MyServer/MyService.svc"
            binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_IDNSService"
            contract="ServiceReference1.IDNSService" name="BasicHttpBinding_IDNSService" />
        </client>
      </system.serviceModel>