问题标签 [servicecontract]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
4731 浏览

wcf - System.Exception.Data will not serialise on DataContract?

I have some WCF services using dataContracts and i wanted to I was hoping to pass a Exception with custom Dictionary< string , object > data in the Data property, but when i add any data on this array before throwing i get the following error in the ErrorHandler of my custom ServiceBehavior:

with data contract name 'ArrayOfKeyValueOfanyTypeanyType:http://schemas.microsoft.com/2003/10/Serialization/Arrays' is not expected. Add any types not known statically to the list of known types - for example, by using the KnownTypeAttribute attribute or by adding them to the list of known types passed to DataContractSerializer.

Do i invariably need to create a custom exception with a Dictionary property annotated as a DataContract and throw that? the idea of using the ErrorHandler is avoiding to handle exceptions in each service method, do i still need to add further annotations to the methods? what i am missing?

for reference, this is my FaultErrorHandler class:

my typical service interface looks like:

0 投票
1 回答
1398 浏览

wcf - 为另一个类 WCF 实现服务合同基类的类

我有一个实现服务合同的类。从这个类派生的另一个类又实现了另一个服务契约

如何公开合约 IB 的端点?

我尝试的端点:

如果我这样做,它会给出错误

服务“B”实现了多种 ServiceContract 类型,并且在配置文件中没有定义端点。WebServiceHost 可以设置默认端点,但前提是服务仅实现单个 ServiceContract。要么将服务更改为仅实现单个 ServiceContract,要么在配置文件中明确定义服务的端点。

提前致谢。

编辑

配置上面有错字。

我为此使用的模板是 WCF Rest 模板 4.0(如果有什么不同的话)

0 投票
2 回答
818 浏览

c# - 以编程方式发现 ServiceHost 的服务类型

天,

我试过搜索 MSDN 和这里,但我认为我不能这样做:

给定对 a 的引用ServiceHost,是否可以发现它正在执行的主机的类型?

就像是

MagicCallHere 存在吗?

如果你能躲避反射,加分...

0 投票
1 回答
1606 浏览

wcf - WCF ServiceContract 命名空间更新

我有以下 WCF 接口:

我改成了这个:

目标 XML 命名空间已从默认 tempuri.org 更改为 user.com

这会中断现有客户端的调用,因为 wsdl 不同。

有没有办法在配置文件中指定这个命名空间?这将帮助我保留现有客户端的旧名称空间并能够升级 WS。

0 投票
2 回答
827 浏览

wcf - 如何生成所有数据合同类

我已经用 WCF 建立了聊天服务。我有标记为 datacontract 属性的类

我的服务合同如下

当我尝试从 VisualStudio 2010 生成客户端代码时,没有生成类 Message。但是当我将服务合同上的方法“Whisper”中的参数“消息”类型更改为消息而不是字符串时,它会生成。

我将参数消息的类型更改为“消息”而不是“字符串”:

我有需要 Message 类才能正常工作的回调类。

问题是为什么标记为 datacontract 属性的类不包含在服务合同的方法参数或返回值中时不会生成。

0 投票
2 回答
691 浏览

c# - 仅为 WCF 服务上可用的服务合同接口之一生成客户端

我目前正在重构一个大型 WCF 服务,该服务由多个不同客户端应用程序使用的一个服务合同接口(从这里开始为“SCI”)组成。我已经拆分了 SCI,因此对于每种类型的客户端应用程序,都有一个特定于其所需操作的 SCI。SCI 的一些共享部分在基础 SCI 中定义,客户端应用程序特定的 SCI 继承该基础 SCI。

有一个服务类可以实现所有客户端特定的 SCI。共享基础 SCI 存在菱形接口继承情况这一事实有时意味着同一操作可通过多个 SCI 获得。当自动生成客户端(尤其是使用异步客户端方法)时,生成的代码有很多丑陋的<generated-type>1,2,3等等......

为了避免这种情况,我想为每个客户端应用程序添加一个服务引用,它只为与该特定应用程序相关的 SCI 生成一个客户端。由于相同的功能出现在不同的 SCI 上,这应该不会导致任何问题。

这可能吗?

在这种情况下实现模块化和代码重用的任何其他技巧也将不胜感激。

0 投票
3 回答
5255 浏览

wcf - 为什么 WCF 服务使用接口作为服务契约而不是抽象类?

这是我在一次采访中被问到的一个问题。

创建 WCF 服务时,您会得到两个文件;“IService.cs”和“Service.cs”。为什么它是实现接口的类而不是继承抽象类的类。不要回复说您不能将 [servicecontract] 属性放在抽象类上。我知道您只能将其应用于接口,但为什么呢?

0 投票
2 回答
7860 浏览

wcf - WCF - 合同版本控制(通过示例)

对于熟悉版本控制服务/数据合同的最佳实践的人来说,这应该很容易。我想确保以正确的方式使用此版本控制。

所以,假设我们有一个服务合同:

和数据合同:

如果我真的需要将后者更改为其他内容:(以下仅为示例)

...那么我应该如何从服务中使用 DTOCustomer2 而不是 DTOCustomer1 以便新旧客户端兼容?在这种情况下推荐什么?我的服务合同会改变吗?AFAIK 我不需要更改服务合同。服务合同会是什么样子?我需要一个新的端点吗?我是否需要使用新数据合约的新运营合约?

EDIT1: 简单地改变

bool AddCustomer(DTOCustomer1 客户);

进入

bool AddCustomer(DTOCustomer2 客户);

会做?

EDIT2: EDIT1 的答案是No,因为 DTOCustomer2 具有不同的命名空间,但如果它具有相同的命名空间,它可能会起作用。我仍然不知道这里最好的事情是什么,并希望有人能提出一个好的答案。

先感谢您!

0 投票
4 回答
2155 浏览

wcf - 获取由服务实现的 WCF 合同

作为客户端是否有可能获得 WCF 主机公开的合同列表?

我想查询一个服务并询问它实现了哪些接口。

0 投票
1 回答
10499 浏览

wcf - 在 ServiceModel 客户端配置部分中找不到名称为 ' 和合同 'I' 的端点元素。

我正在研究 Base WCF Service-Client WCF service-Consumer Base Wcf servcie 模型,如下所示:

在此处输入图像描述

在这个模型中,我创建了一个 Base WCF 服务并创建了 1 个 WCF 服务,即;ClientWCFService 和 1 个 ASMX 服务,即;ClientASMXservice 使用 BaseWCFServiceProxy.cs,Base WCF Service 的 Proxy 类使用 SVCUtil.exe。

ClientWCFService 和 ClientASMXservice 在 StandAlone 环境中运行良好。现在,我使用相同的代理类 BaseWCFServiceProxy.cs 创建了一个使用者控制台应用程序,以使用 BaseWcfService 类访问 ClientWCFService 和 ClientASMXservice。

根据OOP 规则,BaseWcfService 类是 ClientWCFService 和 ClientASMXservice 的基类,我可以使用 Base 服务类构造函数访问这些服务。

服务调用如下:对于 ClientWCFService

对于 ClientASMX 服务

消费者控制台应用程序构建良好,但在运行时初始化 ModelWCFServiceContractClient 对象时,它抛出InvalidOperation 异常为:

在 ServiceModel 客户端配置部分中找不到名称为“IModelWcfServiceContract”和合同“IModelWcfServiceContract”的端点元素。这可能是因为没有为您的应用程序找到配置文件,或者因为在客户端元素中找不到与此名称匹配的端点元素。

我尝试为每种类型的服务使用不同的端点来解决此问题,但未能成功。

更快的响应将不胜感激。另外请不要仅仅通过清除拼写错误来帮助我,因为这会浪费我的时间来阅读由于清除拼写错误而产生的警报。时间对我来说很关键。。

谢谢