1

我为 Dynamics CRM 2011 编写了一个插件,它调用托管在不同服务器上的 WCF 服务。下面是我插件中的代码。在插件的类库中,我没有使用服务引用,而是使用 svcutil.exe 来生成 WCF 客户端。

var binding = new BasicHttpBinding();
binding.Name = "BasicHttpBinding_IMyService";
binding.Security.Mode = BasicHttpSecurityMode.None;
binding.Security.Transport.ClientCredentialType = HttpClientCredentialType.None;
binding.Security.Transport.ProxyCredentialType = HttpProxyCredentialType.None;
binding.Security.Message.ClientCredentialType = BasicHttpMessageCredentialType.UserName;
var endpoint = new EndpointAddress("http://test/MyService.svc");
ChannelFactory<IMyService> factory = new ChannelFactory<IMyService>(binding, endpoint);
IMyService channel = factory.CreateChannel();
channel.InsertTest(testobject);

我收到以下错误:

'System.Threading.Tasks.Task`1[System.Int32]' 无法序列化。考虑使用 DataContractAttribute 属性对其进行标记,并使用 DataMemberAttribute 属性标记您想要序列化的所有成员。如果该类型是一个集合,请考虑使用 CollectionDataContractAttribute 对其进行标记。有关其他支持的类型,请参阅 Microsoft .NET Framework 文档。

任何人都有尝试这样做的经验?或者关于我做错了什么的任何想法?

4

2 回答 2

0
  1. 确保服务设置正确。几个月前我哭了。谷歌“在 VS 2010 中为 REST 设置基本的 WCF Web 服务”,您可能会在 WordPress 博客上获得成功,我在其中解释了该方法。(不想在这里自我推销。我希望在我自己解决问题之前有人拥有那个博客。真的。)

  2. 显示您用于连接到服务的代码。明天上班的时候,我可以和我的比较一下,发现有什么不同。我记得我有这个序列化问题,但我不确定我们是如何杀死它的。但不知何故,我们做到了。(并检查达里尔的提示是否有效。它可以。)

于 2013-01-24T20:57:02.487 回答
0

你得到的错误是你发送的对象的序列化。检查您的测试对象是否具有 Task 属性。如果是这样,请考虑在序列化期间忽略它。 请参阅此 SO 帖子。

于 2013-01-24T14:26:35.437 回答