是否可以从客户端使用通用 DataContract?

发布于 2024-11-19 19:27:57 字数 677 浏览 4 评论 0原文

我知道当您创建服务时,您可以创建一个通用的 DataContract:

[DataContract(Name = "Get{0}Request")
public sealed class GetItemRequest<T>
    where T : class, new() { ... }

[DataContract(Name = "Get{0}Response")
public sealed class GetItemResponse<T>
    where T : class, new() { ... }

[ServiceContract]
public void MyService : IMyService
{
    [OperationContract]
    GetItemResponse<Foo> GetItem(GetItemRequest<Foo> request);
}

这会为我的 WSDL 生成 GetFooRequestGetFooResponse 定义。现在,我好奇的是是否有可能朝另一个方向发展?

是否可以创建一个使用通用数据契约的客户端并将其作为具体对象传递给服务器?我在添加服务引用后尝试了此操作,但效果并不是很好。所以这更多的是我想知道是否有任何方法(即使这意味着不添加服务引用)来做到这一点?

I know when you create a service you can create a generic DataContract:

[DataContract(Name = "Get{0}Request")
public sealed class GetItemRequest<T>
    where T : class, new() { ... }

[DataContract(Name = "Get{0}Response")
public sealed class GetItemResponse<T>
    where T : class, new() { ... }

[ServiceContract]
public void MyService : IMyService
{
    [OperationContract]
    GetItemResponse<Foo> GetItem(GetItemRequest<Foo> request);
}

This generates a GetFooRequest and GetFooResponse definition for my WSDL. Now, what I'm curious about is if it is possible to go in the other direction?

Is it possible to create a client that uses the Generic DataContracts and pass those to the server as a concrete object? I attempted this after adding a Service Reference and it didn't really work out so well. So this is more of me wondering if there is any way (even if it means not adding a Service Reference) to do this?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

好菇凉咱不稀罕他 2024-11-26 19:27:57

最终,WCF 将考虑合同类别。如果它是从 WSDL/MEX 生成的,则不会有此内容(因为这不是它在元数据中的表达方式) - 但如果您的客户端具有上述代码,那么确保它应该可以正常工作。

如果您从客户端向 DTO dll 添加引用(即 dll/项目引用),并确保 WCF 已启用共享程序集,则它应该可以工作。如果它仍然犹豫不决,那么就作弊:使用服务引用只是为了获取配置数据。然后删除服务引用但保留配置(否则这些配置文件很麻烦)。然后它应该从库中找到类型。

Ultimately, WCF is going to look at the contract class. If that is generated from WSDL/MEX it won't have this (since this isn't how it is expressed in the metadata) - but if your client has the code as above, then sure it should work fine.

If you add a library reference (i.e. a dll / project reference) to your DTO dll from the client, and ensure WCF has shared-assemblies enabled, it should work. If it still baulks, then cheat: use a service reference just to get the config data. Then delete the service reference but keep the configuration (those config files are a pain otherwise). Then it should locate the type from the library.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文