我有一个客户端应用程序,它与我们在服务器上托管的Web服务进行通信(我们称之为 hostServer )。我的客户端应用程序可以使用 basicHttpBinding 进行构建和连接。但是,出于安全原因,我正试图强调 wsHttpBinding 。
上周午餐前,我发誓它正在使用硬编码证书。从午餐回来,检查我的代码,现在它不会运行。我一直得到“https://hostServer:1234/Service.svc/MyServiceName没有可以接受该消息的端点。这通常是由不正确的地址或SOAP操作引起的。”我已经尝试重新检查我的设置,回顾我的步骤,但似乎无法恢复到我所处的运行状态。
我使用的服务地址为“https:// hostServer:1234 / Service.svc?singleWsdl”。我可以毫无问题地导航到“https:// hostServer:1234 / Service.svc”并查看Wsdl。
我的客户端代码是
WSHttpBinding wsBinding = new WSHttpBinding(SecurityMode.Transport);
wsBinding.Security.Transport.ClientCredentialType = HttpClientCredentialType.Certificate;
Client = new MyServiceName(wsBinding, new EndpointAddress(endpoint));
Client.ClientCredentials.ClientCertificate.SetCertificate(
StoreLocation.CurrentUser,
StoreName.My,
X509FindType.FindBySubjectName,
"localCertName");
Client.ChangePassword("test_user", "pt", "a1");
我的值端点 = https://hostServer:1234/Service.svc/MyServiceName
我的IIS站点设置了Http和Https的绑定(具有正确的IP和端口ID)
我真的需要让这个代码在起飞前工作(我的妻子应该在我们的第二个孩子的任何一天到期)。我一直在努力调试这个2天,除了我花时间站起来的时间。请帮忙。
答案 0 :(得分:0)
所以我终于能够重新开始工作了。列出下面执行的步骤,希望它可以帮助其他人。
在IIS服务器(IIS管理器)上:
修改了“网站绑定”以包含HTTP& HTTPS(带有不同的端口号)
将SSL设置设为“需要SSL”和“接受”
在IIS服务器上(Web.Config):
已添加
<bindings>
<wsHttpBinding>
<binding name="wsHttpEndpointBinding">
<security mode="Transport">
<transport clientCredentialType ="Certificate"/>
</security>
</binding>
</wsHttpBinding>
</bindings>
到“System.ServiceModel”标记。
此外,将“bindingConfiguration =”wsHttpEndpointBinding“添加到我的端点。
代码
更新的端点地址,以使用在IIS服务器上生成的地址。
使用以下代码创建端点
WSHttpBinding wsBinding = new WSHttpBinding(SecurityMode.Transport);
wsBinding.Security.Transport.ClientCredentialType = HttpClientCredentialType.Certificate;
Client = new ServiceClient(wsBinding, new EndpointAddress(endpoint));
Client.ClientCredentials.ClientCertificate.SetCertificate(StoreLocation.LocalMachine, StoreName.My, X509FindType.FindByIssuerName, certName);