0

我在 WCF 中有一个在我客户的所有机器上运行的应用程序。但只有一个像网络中的服务器一样工作。

在此模型中,每次调用 WCF“客户端”时,他都会调用您的 WCF“服务器”以获取您的响应。

所以,我的界面上有这个配置:

[WebInvoke(BodyStyle = WebMessageBodyStyle.WrappedRequest)]
[OperationContract]
MyObjectReturn CheckUpdate(string foo1, string foo2, string foo3);

在我的代码中,这是:

MyObjectReturn myObjReturn = new MyObjectReturn();
if (this.Master)
{
   myObjReturn.Code = 15000;
   myObjReturn.Message = "New Update found";
   return myObjReturn;
}
else
{
   var myTask = Task<MyObjectReturn >.Factory.StartNew(() =>
   {
      ServerContractClient server = new ServerContractClient(master.Url);
      return server.CheckUpdate(foo1, foo2, foo3);
   } 
   return myTask.Result;
} 

当 WCF“客户端”调用他的“服务器”时,返回始终为空!如果我不使用“Task.Factory.StartNew”,我会收到错误请求错误

任何提示?

4

2 回答 2

4

呃,首先,“服务器”和“客户端”是首选的命名法

其次,Servy 的观点是,如果您想立即返回数据,那么启动线程没有任何意义。也就是说,线程很有趣!谁不想穿线?要正确地做到这一点,您必须稍微修改您的应用程序,但现在您至少必须将 WCF 方法设计为异步的,并且进行调用的客户端需要知道它是异步的;否则结果为空,正如您所经历的那样。最佳起点在这里

于 2013-08-07T14:22:33.710 回答
1

我很惭愧地说,但问题不是我想的那样。我注意到当我通过浏览器调用 WCF 服务器时,我的返回值不为空。就在那时,我意识到我的绑定是真正的问题。我注意到有两个错误:

1)我的绑定是通过代码创建的。如我的界面中所述,我将 WebMessageBodyStyle 声明为 WrappedRequest。但是在创建绑定客户端时,我使用的是 Wrapped;

2)我的ServiceBehavior和DataContract的命名空间不同,这也造成了WCF的混乱。

这个链接帮助我澄清了最后一点:

WCF Web 服务调用另一个 WCF Web 服务不返回数据

无论如何,谢谢大家在这个问题上给了我非常宝贵的建议。

于 2013-08-08T13:07:12.950 回答