gpt4 book ai didi

c# - WCF With NetTCP 跨同一网络上的机器

转载 作者:太空狗 更新时间:2023-10-29 21:36:04 26 4
gpt4 key购买 nike

我正在尝试在同一网络上的多台计算机和一台服务器之间实现一些跨进程通信。我现在正在尝试的是将 WCF 与 NetTcpBinding 一起使用,托管在我在同一台机器上运行的应用程序中,但是当我尝试从另一台机器连接时,它会引发 SSPI 安全错误。

我发现了很多执行此跨机器操作的示例,但所有示例都涉及一个我真的很想避免的 app.config 文件。我希望能够将此功能嵌入到没有其他依赖项(即配置文件)的 DLL 中,我只需将所有必要的服务器地址等传递给它,它就可以工作。无论如何,是否可以纯粹在代码中设置此安全性(通过端点等)?

我正在用下面的代码测试这一切:

服务器:

using System;
using System.ServiceModel;

namespace WCFServer
{
[ServiceContract]
public interface IStringReverser
{
[OperationContract]
string ReverseString(string value);
}

public class StringReverser : IStringReverser
{
public string ReverseString(string value)
{
char[] retVal = value.ToCharArray();
int idx = 0;
for (int i = value.Length - 1; i >= 0; i--)
retVal[idx++] = value[i];

string result = new string(retVal);
Console.WriteLine(value + " -> " + result);
return result;
}
}

class Program
{
static void Main(string[] args)
{
var uri = "net.tcp://" + System.Net.Dns.GetHostName() + ":9985";
Console.WriteLine("Opening connection on: " + uri);

using (ServiceHost host = new ServiceHost(
typeof(StringReverser),
new Uri[]{
new Uri("net.tcp://" + System.Net.Dns.GetHostName() + ":9985")
}))
{
host.AddServiceEndpoint(typeof(IStringReverser),
new NetTcpBinding(),
"TcpReverse");

host.Open();

Console.WriteLine("Service is available. " +
"Press <ENTER> to exit.");
Console.ReadLine();

host.Close();
}
}
}
}

客户:

using System;
using System.ServiceModel;
using System.ServiceModel.Channels;

namespace WCFClient
{
[ServiceContract]
public interface IStringReverser
{
[OperationContract]
string ReverseString(string value);
}

class Program
{
static void Main(string[] args)
{
var ep = "net.tcp://SERVER:9985/TcpReverse";
ChannelFactory<IStringReverser> pipeFactory =
new ChannelFactory<IStringReverser>(
new NetTcpBinding(),
new EndpointAddress(
ep));

IStringReverser pipeProxy =
pipeFactory.CreateChannel();

Console.WriteLine("Connected to: " + ep);
while (true)
{
string str = Console.ReadLine();
Console.WriteLine("pipe: " +
pipeProxy.ReverseString(str));
}
}
}
}

最佳答案

安全通常在绑定(bind)上配置。您正在使用 NetTcpBinding 及其默认值,这意味着启用了 Transport 安全性。

在服务器和客户端上,您应该将 NetTcpBinding 实例分配给一个局部变量,以便您可以更改安全(以及可能的其他)设置,然后在调用 时使用该变量>AddServiceEndpoint 或在创建 ChannelFactory 时。

示例:

var binding = new NetTcpBinding();
// disable security:
binding.Security.Mode = SecurityMode.None;

关于c# - WCF With NetTCP 跨同一网络上的机器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6904028/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com