从Mono调用WCF服务与Windows身份验证

时间:2017-05-03 10:51:11

标签: .net linux wcf authentication mono

我在带有IIS的Windows Server上托管了WCF服务,并设置为Windows身份验证(公司内部的用户必须使用域身份验证才能登录其桌面)。我想从一个带有Mono的linux(ubuntu)中调用这个WCF服务。我们使用netTcp协议,但它可以改变。我将服务创建为:

var s = new WebTestService.TestServiceClient();
s.ClientCredentials.UserName.UserName = "mydomain\\myuser";
s.ClientCredentials.UserName.Password = "myPassword";

但它仍然无法进行通信。

有没有人知道在哪里修复此错误?有可能解决吗?先谢谢。

  

未处理的异常:System.IO.IOException:无法从中读取数据   传输连接:由对等方重置连接。 --->   System.Net.Sockets.SocketException:由peer重置连接   System.Net.Sockets.Socket.Receive(System.Byte [] buffer,System.Int32   offset,System.Int32 size,System.Net.Sockets.SocketFlags socketFlags)   [0x00052] in:0 at   System.Net.Sockets.NetworkStream.Read(System.Byte [] buffer,   System.Int32 offset,System.Int32 size)[0x000b4] in   :0
  ---内部异常结束   堆栈跟踪--- at(包装器管理到本机)   System.Object:__ icall_wrapper_mono_remoting_wrapper(intptr,intptr)
  at(wrapper remoting-invoke)   MonoTest.WebTestService.ITestService:GetIdentity()at   MonoTest.WebTestService.TestServiceClient.GetIdentity()[0x00007] in   < 27f805f676fd42ad978ebb382e24c2d7>:0在MonoTest.Program.Main   (System.String [] args)[0x00050] in   < 27f805f676fd42ad978ebb382e24c2d7>:0 [ERROR]致命的未处理   EXCEPTION:System.IO.IOException:无法从中读取数据   传输连接:由对等方重置连接。 --->   System.Net.Sockets.SocketException:由peer重置连接   System.Net.Sockets.Socket.Receive(System.Byte [] buffer,System.Int32   offset,System.Int32 size,System.Net.Sockets.SocketFlags socketFlags)   [0x00052] in:0 at   System.Net.Sockets.NetworkStream.Read(System.Byte [] buffer,   System.Int32 offset,System.Int32 size)[0x000b4] in   :0 ---内部异常结束   堆栈跟踪--- at(包装器管理到本机)   System.Object:__ icall_wrapper_mono_remoting_wrapper(intptr,intptr)
  at(wrapper remoting-invoke)   MonoTest.WebTestService.ITestService:GetIdentity()at   MonoTest.WebTestService.TestServiceClient.GetIdentity()[0x00007] in   < 27f805f676fd42ad978ebb382e24c2d7>:0在MonoTest.Program.Main   (System.String [] args)[0x00050] in   < 27f805f676fd42ad978ebb382e24c2d7>:0

2 个答案:

答案 0 :(得分:1)

我在我的一个wcf网络服务中使用用户名和密码进行Windows身份验证,我分配了用户名和密码,如下所示:

s.ClientCredentials.Windows.ClientCredential.UserName = "mydomain\\myuser";
//in my case I don't use a domain though.
s.ClientCredentials.Windows.ClientCredential.Password = "myPassword";
//I acutally use .SecurePassword and assign it SecureString

答案 1 :(得分:0)

我能够让它在Mono上工作。

netTcpBinding工作(根据我的经验)即使使用" anonymous"认证。

wsHttpBinding无法正常工作(方法或操作未实现)。

只有 basicHttpBinding 有效。它适用于 TransportCredentialOnly 以及传输安全模式,具有clientCredentialType Windows 传输设置。在这种情况下,客户端可以在" domain \ username"中设置用户名。格式和密码。