我有一个现有的WCF服务,其中有30多个函数,每个函数都将XML返回给客户端应用程序。我按照Microsoft的instructions启用了帮助页面。这总结了我的服务方法,让我深入了解请求响应格式,但不包括我的枚举。我正在向第三方供应商开放服务,我想以自我记录的方式扩展帮助文件。
不幸的是,我的大多数函数都返回一个通用的XMLElement,如下所示:
<OperationContract()>
<WebGet(ResponseFormat:=WebMessageFormat.Xml, UriTemplate:="GetToken?u={sUser}&p={sPass}")>
<Description("Validates a user's credentials")>
Function GetToken(ByVal sUser As String, ByVal sPass As String) As XmlElement
其中一些函数的有效负载将包括一些枚举值和表数据。因为我没有强类型返回,所以“帮助”页面不显示任何详细信息。 我已经检查了其他similar questions,我看到有关是否公开枚举的不同建议。我缺少的部分是如何的实际细节。我已尝试在我的IMyService.vb和MyService.svc.vb文件中使用以下内容,但我的帮助页面中没有显示任何新内容:
<DataContract(Name:="StatusCode")>
Enum StatusCode As Integer
<EnumMember> Success = 0
<EnumMember> UserNameMissing = -1
PasswordMissing = -2
PermissionError = -3
AccountNotFound = -4
BusinessRuleViolation = -5
SystemDown = -99
UnknownError = -100
End Enum
我尝试了一些好办法,比如尝试在我的代码中添加多行注释。我不能用“”&amp;环境。新浪潮&amp; “”连接或\ n或
标签。我开始尝试创建一个继承自XMLElement的更强类型的类,但如果对帮助文件有一些技巧,我宁愿避免破坏兼容性的风险。
我看到我可以在输出文件中添加一个XML Comment,为开发人员提供一些背景信息,但他们必须点击每个方法来阅读它。 (我将它设置为仅出现在开发服务器上而不是生产中。)
我想我可以在合同中添加另一个方法,它只是说ListMyEnums并返回一个强类型的值集,但这看起来很奇怪。对此我有任何建议。
答案 0 :(得分:1)
我假设从您的操作返回的XmlElement需要在某个时候在客户端进行反序列化才能使用?如果是这样,那么消费者必须已经拥有某种等效的对象图,以便工作。
我认为最简单的方法是通过NuGet或npm(甚至只是共享程序集)之类的消费包提供消费者对象图。
消费者包将包含您用于序列化您发送的XML(枚举和所有)的实际图表,甚至可以封装消费者调用您的服务的方式。这样,您就可以在客户端上控制对象图和反序列化XmlElement。
消费者将受益,因为他们需要做的就是使用您的客户端软件包然后进行调用,类似于它与WSDL和SOAP的工作方式。
现有消费者松散耦合
我实际上期望服务和消费者之间的高度耦合。实际上,我不会在这个例子中使用术语耦合,而是 cohesion 。高度凝聚力的软件是好的。