截图将真正澄清很多事情。基本上,我有这个服务并使用WCF测试客户端我可以得到一个字符串。但是,我使用Visual Studio创建的客户端引用表示我的方法返回为void。
我的Test()方法中的ServerConnection对象引用了Visual Studio创建的服务引用变量。
Root.svc.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.Text;
namespace chatService_SignalRService.Services
{
// NOTE: You can use the "Rename" command on the "Refactor" menu to change the class name "Root" in code, svc and config file together.
// NOTE: In order to launch WCF Test Client for testing this service, please select Root.svc or Root.svc.cs at the Solution Explorer and start debugging.
public class Root : IRoot
{
public String DoWork()
{
return "Hello Bailey!";
}
}
}
IRoot.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.Text;
namespace chatService_SignalRService.Services
{
// NOTE: You can use the "Rename" command on the "Refactor" menu to change the interface name "IRoot" in both code and config file together.
[ServiceContract]
public interface IRoot
{
[OperationContract]
String DoWork();
}
}
我正在使用Portable Class库。我选择该类库,添加服务引用,将地址指向我的Web服务器,并将其命名为ServerCT。
然后在我的可移植类库下的Profile.cs中,我创建了一个对象和方法。
using Microsoft.AspNet.SignalR.Client;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Classes
{
public class Profile : User
{
public static ServerCT.RootClient ServerConnection = new ServerCT.RootClient();
public void Test()
{
ServerConnection.DoWorkAsync();
}
}
}
答案 0 :(得分:1)
生成的异步方法总是无效的,因为它们是异步的并且不返回任何结果。相反,您应该使用Completed
事件来处理结果:
ServerConnection.DoWorkCompleted += (sender, args) =>
{
Console.WriteLine($"DoWork result: {args.Result}");
};
ServerConnection.DoWorkAsync(); // void, the result is provided through event handler
如果要进行同步调用并同步获取结果,则应该像这样调用同步方法DoWork
:
ServerConnection.DoWork(); // returns string
请注意,不会为某些类型的项目或\和配置生成同步操作。例如,对于Silverlight应用程序。