Estoy tratando de implementar algunas comunicaciones de proceso cruzado que se encuentran entre varias computadoras y un servidor en la misma red. Lo que intento ahora es usar WCF con NetTcpBinding, alojado en mi aplicación que funciona en la misma máquina, pero cuando intento conectarme desde otra máquina, arroja un error de seguridad de SSPI.WCF Con NetTCP en todas las máquinas en la misma red
He encontrado muchos ejemplos de hacer esta combinación de máquinas cruzadas, pero todas involucran un archivo app.config que REALMENTE quisiera evitar. Quiero poder incrustar esta funcionalidad en una DLL que no tenga otras dependencias (es decir, archivos de configuración) para las cuales puedo pasar todas las direcciones de servidor necesarias, etc., y funcionará. ¿Hay alguna forma de configurar esta seguridad (a través de los puntos finales, etc.) puramente en código?
estoy probando todo esto con el código de abajo:
SERVIDOR:
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();
}
}
}
}
CLIENTE:
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));
}
}
}
}
estoy haciendo algo similar a esto, sin embargo siempre me dan una excepción de tiempo de espera incluso si la función Trato de llamar sólo tiene la línea de retorno de -1; y tiene el tiempo de envío establecido en 1 hora, la única diferencia principal es que he usado http básico en lugar de tcp, cualquier idea sobre lo que pueda necesitar hacer. – ZoomVirus