我一直在尝试使用WCF并将DataContract添加到我的服务器并更新了ServiceContract。当ServiceReference首次添加到客户端时,我在同一台PC上运行它们,所以我使用localhost。我现在尝试通过以太网电缆连接2个电脑并以这种方式更新服务参考。我已将局域网上的服务器IP地址设置为192.168.10.10
。在服务器表单上单击按钮时,将执行以下代码。
private void btnCommenceService_Click(object sender, EventArgs e)
{
host = new ServiceHost((typeof(Service)), new Uri[] { new Uri("http://localhost:9000")});
host.AddServiceEndpoint(typeof(IServices),
new WSDualHttpBinding(),
"ServerService");
ServiceMetadataBehavior smb = new ServiceMetadataBehavior();
smb.HttpGetEnabled = true;
smb.MetadataExporter.PolicyVersion = PolicyVersion.Policy15;
host.Description.Behaviors.Add(smb);
host.Open();
txtStatus.Text = "Service is open.";
}
我已经在两台电脑上关闭了防火墙,并成功地从客户端电脑ping了地址"http://192.168.10.10"
。如果我在浏览器中输入,我也设法访问了一些随机网页。
在客户端,如果我点击我的解决方案并选择“添加服务参考”并输入
"http://192.168.10.10"
"http://192.168.10.10:9000"
"http://192.168.10.10:9000/ServerService"
所有这些都带有某种形式的错误,通常是以下几行:
The document at the url http://192.168.10.10:9000/ was not recognised as a known document type.
The error message for each known type may help u fix the problem:
-Report from 'XML Schema' is The document format is not recognised(the content type is 'text/html;charset=utf-8').'.
Report from DISCO Document is There was an error downloading `'http://localhost:9000/?disco'.'.`
Unable to connect to the remote server.
No connection could be made because the target machine actively refused it 127.0.0.1:9000
etc
任何人都有一些指示,说明为什么它不通过LAN工作但我可以访问并ping通地址?
答案 0 :(得分:1)
尝试像这样更改绑定安全配置
WSDualHttpBinding wsDualBinding= new WSDualHttpBinding();
wsDualBinding.Security.Mode = WSDualHttpSecurityMode.None;
wsDualBinding.Security.Message.ClientCredentialType = MessageCredentialType.None;
然后添加服务端点
host.AddServiceEndpoint(typeof(IServices),wsDualBinding,"ServerService");
希望它有用
答案 1 :(得分:1)
您已通过以太网直接连接2台电脑。你在使用交叉电缆吗? 2 pc是否在同一子网掩码中?例如。 255.255.255.0?
答案 2 :(得分:0)
最后让它工作但我选择重新启动整个Server项目。我在下面列出了我做的所有不同的事情,其中一些可能是问题,其他可能不是。
创建了一个wcf服务库,而不是仅仅尝试使用winforms程序。服务库完成后,我在winforms应用程序中引用它并将其app.config中的代码复制到winforms app.config中。
要特别注意基地址和端点地址,因为您需要将它们加在一起,然后从客户端连接到该端点。
正如User1467261所提到的,我确保我可以双向ping。我不得不进入控制面板 - > ..->网络连接选择LAN - >属性 - > ipv4选项,然后在两台PC上指定唯一的IP地址。 (我猜很多人已经知道了这个,但我不知道怎么做。)
正如Feras Salim所说,两个安全设置都是默认设置,因为我刚刚在笔记本电脑上创建了一个新用户,其用户名和密码与另一台计算机相同。
客户端,我使用了添加服务参考。我不太清楚mex终点用于什么,但我只是连接到基地址,它更新了我的app.config文件客户端。请记住在添加服务引用时为您指定的命名空间包含using语句。
服务器端,请记住在自定义类上使用属性而不是字段。
非常感谢Feras Salim,User1467261为您提供帮助。