我遇到了WCF服务正常运行的问题。我正在尝试创建一个双工服务,但是我尝试返回一个自定义数据类型,它打破了客户端。
如果删除GetTestData,一切正常。当我添加它时,客户端的所有内容都会中断。看起来我可以通过取消选中“在引用的程序集中重用类型”来修复它,但我不确定这样做是否会产生负面影响。
这是代码
ITestService.cs
namespace MyApp.Server
{
[ServiceContract(Namespace = "http://www.mysite.net", CallbackContract = typeof(IDuplexTestClient))]
public interface ITestService
{
[OperationContract]
string Hello();
[OperationContract]
TestData GetTestData();
}
public interface IDuplexTestClient
{
[OperationContract(IsOneWay = true)]
void TestCallback(string message);
}
}
TestService.cs
namespace MyApp.Server
{
[ServiceBehavior(Namespace = "http://www.mysite.net")]
public class TestService : ITestService, ICrossDomainPolicyResponder
{
public string Hello()
{
return "Hello";
}
public TestData GetTestData()
{
return new TestData();
}
#region ICrossDomainPolicyResponder Members
public Stream GetSilverlightPolicy()
{
string result = @"<?xml version=""1.0"" encoding=""utf-8""?>
<access-policy>
<cross-domain-access>
<policy>
<allow-from http-request-headers=""*"">
<domain uri=""*""/>
</allow-from>
<grant-to>
<resource path=""/"" include-subpaths=""true""/>
</grant-to>
</policy>
</cross-domain-access>
</access-policy>";
return StringToStream(result);
}
public Stream GetFlashPolicy()
{
string result = @"<?xml version=""1.0""?>
<!DOCTYPE cross-domain-policy SYSTEM ""http://www.macromedia.com/xml/dtds/cross-domain-policy.dtd"">
<cross-domain-policy>
<allow-access-from domain=""*"" />
</cross-domain-policy>";
return StringToStream(result);
}
private Stream StringToStream(string result)
{
WebOperationContext.Current.OutgoingResponse.ContentType = "application/xml";
return new MemoryStream(Encoding.UTF8.GetBytes(result));
}
#endregion
}
}
TestData.cs
namespace MyApp.SDK
{
[DataContract(Namespace = "http://www.mysite.net")]
public class TestData
{
[DataMember]
public string TestString { get; set; }
}
}
答案 0 :(得分:0)
您的类型TestData在服务器端声明。
要让客户端使用返回TestData的服务,它必须知道TestData的样子。
执行添加服务引用时设置此项。
有两种方法可以做到。
&#34;重复使用引用程序集中的类型&#34;说你想使用第一个选项。
没有&#34;对&#34;这样做的方式。如果您可以控制客户端和服务器,则可以重复使用dll,因此在类型更改时无需更新服务引用。
答案 1 :(得分:0)
我仍然不能100%确定这里发生了什么,但我发现了一个适合我的解决方案。我能够使用“在指定的引用程序集中重用类型”来获得我需要的功能。这解决了问题,但仍允许我在客户端和服务器之间共享MyApp.SDK类。