WCF身份验证和套​​接字中止异常

时间:2010-07-29 14:00:21

标签: wcf certificate net.tcp

这是该项目的设置。

我有一个WCF服务,它在缓冲模式下的net.tcp绑定上托管,并且启用了ReliableSession。

绑定配置为使用TransportWithMessageCredential安全性。证书是我使用指纹识别的自签名证书。 UserNameValidator是一个自定义验证器,用于测试,永远不会失败(之前没有失败,但我删除了不确定性)

服务和客户端位于同一台计算机上,他们都可以访问证书。

问题:

尝试从服务中使用Method时,我收到Socket Aborted异常。这是我用来打开服务连接的代码。 MonitorServiceCallbacks仅包含满足接口要求的空方法。

 _instanceContext = new InstanceContext(new MonitorServiceCallbacks());
 _serviceInterface = new MonitorCallbackServiceClient(_instanceContext);

 _serviceInterface.ClientCredentials.UserName.UserName = Environment.MachineName;
 _serviceInterface.ClientCredentials.UserName.Password = "myPassword";
 _serviceInterface.Open();

这似乎工作正常,因为_serviceInterface.State变量设置为State.Opened并调用自定义验证器并且无异常返回。

但是,如果我尝试使用_serviceInterface代理调用方法,则不会在服务上运行我可以破解的代码,并且除了SocketAborted异常之外,tracelog没有显示任何错误,该异常在收到看似似乎是的1分钟后发生该方法的消息。

没有InnerException。

我试图谷歌问题,但结果倾向于说“只是禁用安全性,它会正常工作”。不幸的是,这不可能做到。

我对这个问题感到非常困惑,非常感谢任何帮助。

非常感谢,
Ehrys

1 个答案:

答案 0 :(得分:0)

这实际上是序列化错误。

我试图发送给从数据协定继承的服务的对象。所以我试图向服务发送数据合同。

WCF似乎不允许这样做。

我要感谢John Saunders提醒我,不仅服务可以启用跟踪。启用客户端跟踪可以节省我很多时间。

我试图做以下事情:

_serviceInterface.Register((MyDataContract)MyParentObject, aVariable, anotherOne);

我需要做什么:

MyDataContract tempContract = MyParentObject.CreateMyDataContract();
_serviceInterface.Register(tempContract, aVariable, anotherOne);
/* Note: MyParentObject.CreateMyDataContract() is my own method which creates an instance
of the MyDataContract and copies the relevant information to it */