我已经尝试了很多这方面的技巧,但我无法让它发挥作用。在客户端我有:
<configuration>
<system.serviceModel>
<bindings>
<basicHttpBinding>
<binding name="[binding_name]">
<security mode="Transport" />
</binding>
</basicHttpBinding>
</bindings>
<client>
<endpoint address="/[service_name].svc"
binding="basicHttpBinding"
bindingConfiguration="[binding_name]"
contract="[contract_name]"
name="[endpoint_name]" />
</client>
</system.serviceModel>
</configuration>
在服务器上:
...<service name="[service_name]">
<endpoint address=""
binding="basicHttpBinding"
bindingConfiguration="[binding_name]"
contract="[contract_name]"
name="[endpoint_name]"/>
<endpoint contract="IMetadataExchange"
binding="mexHttpsBinding"
address="mex" />
</service><behaviors>
<serviceBehaviors>
<behavior name="">
<serviceMetadata httpGetEnabled="true" httpsGetEnabled="true" />
<serviceDebug includeExceptionDetailInFaults="false" />
</behavior>
</serviceBehaviors>
</behaviors><bindings>
<basicHttpBinding>
<binding name="[binding_name]">
<security mode="Transport">
<transport clientCredentialType ="None"/>
</security>
</binding>
</basicHttpBinding>...
一个潜在的线索是,当我导航到https:// [server_name] / [service_name] .svc?wsdl时,我看到位置正确
<wsdl:import namespace="http://[namespace]" location="https://[server_name]/[service_name].svc?wsdl=wsdl0"/>
但
不正确 <wsdl:port name="[binding_name]" binding="tns:[binding_name]">
<soap:address location="http://[machine_name]/[service_name].svc"/>
</wsdl:port>
通知location =“ http :// [ machine_name ] / [service_name] .svc”这是预期的吗?如果没有,那可能是什么问题?
我还确保服务器配置中的[service_name]是服务实现的FQN。在我在服务器上启用SSL并将安全模式更改为传输等之前,一切都按预期工作。
答案 0 :(得分:0)
我的问题是,尽管<service name="[service_name]">
中的service_name是服务实现的正确FQN,但它与* .svc文件中的Service属性不匹配。在这种情况下,似乎WCF为端点创建了一个默认名称,类似于BasicHttp_service_name。这一直有效,直到启用SSL并且正在查找端点,其URL以https开头。
至于machine_name问题,原因是我没有在IIS网站绑定中设置https的主机名。