请耐心等待我,因为我是WCF服务/ Windows服务的新手。我已经创建了一个托管在Windows服务中的WCF服务。我想通过TCP在Silverlight浏览器内应用程序中使用该WCF服务。下面是Silverlight中用于访问WCF服务的代码片段:
var messageEncoding = new BinaryMessageEncodingBindingElement();
var tcpTransport = new TcpTransportBindingElement();
var binding = new CustomBinding(messageEncoding, tcpTransport);
// Create a channel factory for the service endpoint configured with the custom binding.
var cf = new ChannelFactory<ICalcService>(binding, new EndpointAddress("net.tcp://192.168.2.104:4508"));
// Open the channel.
ICalcService channel = cf.CreateChannel();
// Invoke the method asynchronously.
channel.BeginAdd(9, 5, AddCallback, channel);
private void AddCallback(IAsyncResult asyncResult)
{
try
{
double endAdd = ((ICalcService) asyncResult.AsyncState).EndAdd(asyncResult);
}
catch (Exception exception)
{
throw exception;
}
}
代码工作正常,但由于某些原因,它通常会抛出臭名昭着的 System.ServiceModel.CommunicationException 并带有以下消息:
Could not connect to net.tcp://192.168.2.104:4508/. The connection attempt lasted for a time span of 00:00:00.1010058. TCP error code 10013: An attempt was made to access a socket in a way forbidden by its access permissions.. This could be due to attempting to access a service in a cross-domain way while the service is not configured for cross-domain access. You may need to contact the owner of the service to expose a sockets cross-domain policy over HTTP and host the service in the allowed sockets port range 4502-4534.
System.Net.Sockets.SocketException 类型的innerException表示
An attempt was made to access a socket in a way forbidden by its access permissions.
此例外背后可能的原因是什么?根据我到目前为止所调查的内容,我只能找到一个原因:错误的 ClientAccessPolicy.xml 。可能是其他原因是什么?如果您有任何有用的资源,请提供相同的信息。还有一个问题,如果我想让Windows服务托管的WCF服务被LAN上的其他机器消耗,我还需要做些什么设置?例如。防火墙设置?我的代码无法访问其他计算机上的WCF服务。它引发了我上面提到的同样的异常。关于如何摆脱这种异常的任何想法?
答案 0 :(得分:0)
问题排序.. !!我必须做以下事情:
1)在Windows服务中创建SecurityMode.None
时指定NetTcpBinding
。
2)在具有高级安全性的Windows防火墙中创建入站规则,以允许在端点地址中指定的端口上的TCP流量。