我已经使用 WSDL 文件添加了ServiceReference, 客户端抛出错误:
找不到名为“Endpoint1”和合同的端点元素 ServiceModel客户端配置中的“ServiceReference.IService” 部分。这可能是因为找不到配置文件 您的应用程序,或者因为没有匹配此名称的端点元素 可以在客户端元素中找到。
我不确定为什么app.config端点没有被选中?
app.config:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<system.serviceModel>
<bindings>
<wsHttpBinding>
<binding name="wsHttpPoint">
<security mode="TransportWithMessageCredential">
<transport clientCredentialType="None" />
<message clientCredentialType="UserName" establishSecurityContext="false" />
</security>
</binding>
</wsHttpBinding>
</bindings>
<client>
<endpoint address="https://example.com:5555/Service.svc"
binding="wsHttpBinding" bindingConfiguration="wsHttpPoint" contract="ServiceReference.IService"
name="Endpoint1" />
</client>
</system.serviceModel>
</configuration>
手动创建代理:
WSHttpBinding binding = new WSHttpBinding();
binding.Security.Mode = SecurityMode.Transport;
EndpointAddress address = new EndpointAddress("https://example.com:5555/Service.svc");
Client.ClientCredentials.UserName.UserName = "";
Client.ClientCredentials.UserName.Password = "";
Client = new ConnectionServiceClient(binding, address);
现在出现了一个新错误:
无法打开connectionSecure通道,因为与远程端点的安全协商失败。这可能是由于在用于创建通道的EndpointAddress中缺少或错误指定了EndpointIdentity。请验证EndpointAddress指定或暗示的EndpointIdentity是否正确标识了远程端点。
我是否正确设置了绑定? 我看到的关于basichttpBinding的每个帖子都有安全传输的wsHttpbinding示例吗?
答案 0 :(得分:0)
在app.config中,客户端需要知道服务器在哪个帐户下运行。只需添加:
<endpoint address="https://example.com:5555/Service.svc"
binding="wsHttpBinding" bindingConfiguration="wsHttpPoint" contract="ServiceReference.IService"
name="Endpoint1">
<identity>
<userPrincipalName value="AccountName@domain" />
</identity>
</endpoint>
另外,您可能需要将使用过的端口注册到执行服务的用户。以管理员身份打开您的开发人员命令提示符并运行:
netsh http add urlacl url=http://+:{Port}/ user={Domain\User}
根据您的需求交换{}
中的值。这只能运行一次。