我希望我的 WorkerRole 应用程序能够进行交互。我已经编写了 WCF 接口/代理,现在我希望能够从客户端应用程序中使用它。我已经尝试在我的本地计算机上托管工作角色,跟踪端点 IP 地址,然后在我的客户端解决方案中,尝试添加对 IP 地址的服务引用,但是 VS2012 找不到它((有趣的是它没有使用相同的端口我指定,而不是它上面的下一个)。然后我尝试将我的工作角色发布到 Azure,然后从那里获取 IP 和连接。仍然找不到服务引用。我在我的机器和 azure 实例上都启动了 IIS。 ..但它仍然没有工作。
无论如何,我尝试使用 svcutil 并且我得到了
Metadata contains a reference that cannot be resolved: 'net.tcp://127.255.0. 2:9192/Test'. <?xml version="1.0" encoding="utf-16"?><Fault xmlns="http://www.w3.org/2003/
05/肥皂信封">
Sendera:ActionNotSupported
由于 EndpointDispatcher 的 ContractFilte r 不匹配,接收方无法处理带有 Action ' http://schemas.xmlsoap.org/ws/2 004/09/transfer/Get' 的消息。这可能是因为合约 m ismatch(发送方和接收方之间的操作不匹配)或发送方和接收方之间的绑定/安全性 m ismatch。检查发送方和接收方是否具有相同的合同和相同的绑定(包括安全要求,例如消息、传输、无)。
无论如何,我尝试使用 IP 地址手动连接主机的客户端。我的客户端在调用称为搜索的过程时与主机建立连接。当我从客户端拨打电话时,我可以在主机上断点。不幸的是,主机旨在返回一个字符串,但客户端只收到一个空值。到底是怎么回事?下面是我的代码:
客户:
private string serviceURL = "net.tcp://127.255.0.2:9192/Test";
private ITest GetAProxy()
{
var binding = new NetTcpBinding(SecurityMode.None);
var endpointAddress
= new EndpointAddress(serviceURL);
return new ChannelFactory<ITest>
(binding, endpointAddress).CreateChannel();
}
[DataContract]
public class Send
{
[DataMember]
public String s { get; set; }
}
[DataContract]
public class Recieve
{
[DataMember]
public String x { get; set; }
}
[ServiceContract]
public interface ITest
{
[OperationContract]
Send Search(Recieve rec);
}
主持人:
[ServiceBehavior(AddressFilterMode = AddressFilterMode.Any)]
public class TestClass : ITest
{
public Send Search(Recieve rec)
{
var s = new Send(); //I can breakpoint here
s.s = "This will be received as a null";
return s;
}
}
[DataContract]
public class Send
{
[DataMember]
public String s { get; set; }
}
[DataContract]
public class Recieve
{
[DataMember]
public String x { get; set; }
}
[ServiceContract]
public interface ITest
{
[OperationContract]
Send Search(Recieve rec);
}
编辑:此外,如果我在调用 Search() 方法时在 Receive 中设置属性 x,则服务器会收到 null。