我为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文档。
任何人都有尝试这样做的经验吗?或者对我做错的任何想法?
答案 0 :(得分:0)
您获得的错误与您发送的对象的序列化有关。检查您的testobject是否具有Task属性。如果是,请考虑在序列化期间忽略它。 See this SO post.
答案 1 :(得分:0)
确保服务设置正确。几个月前我就这样哭了。谷歌“为VS 2010中的REST设置一个基本的WCF Web服务”,你可能会在WordPress博客上受到重视,我会解释这个方法。 (不要试图在这里自我宣传。我希望其他人拥有该博客之前我自己解决了这个问题。真的。)
显示您用于连接服务的代码。当我明天上班时,我可以与我的相比,发现任何不同。我记得我有这个序列化问题,但我不确定我们是如何杀死它的。但不知怎的,我们做到了。 (并检查Daryl的提示是否有效。可以。)