gpt4 book ai didi

c# - 如何替换 ServiceContract 和 OperationContract 的命名约定?

转载 作者:太空狗 更新时间:2023-10-29 21:57:53 25 4
gpt4 key购买 nike

我有以下代码:

[ServiceContract(Name = "Save{0}")]
public ISave<T> where T : BusinessObject
{
[OperationContract(Name = "Save")]
void Save(T obj);
}

public class SaveCustomer : ISave<Customer>
{
public void Save(Customer obj) { ... }
}

我遇到的问题是我使用 IIS/WAS 的 WCF 应用程序不喜欢我给的名称。它不会自动填写。我看到这个 stackoverflow question ,其中有关于为什么名称不自动格式化的答案。我没有等待 Microsoft 允许格式化名称,而是想看看是否可以用我自己的功能替换获取名称的功能。

我只是不确定我需要扩展哪个类(ServiceHostServiceHostFactoryDataContractSerializer 等),甚至是什么我必须重写方法以获得更友好的名称。此外,由于我什至不知道我必须创建什么类,我不知道我可以在哪里告诉我的应用程序使用它(Global.asax 成员?svc 文件?属性?)。

最佳答案

答案似乎是这并不是真正需要的。服务名称似乎是按约定创建的。如果您相应地更改代码:

[ServiceContract] // No use of the 'Name' property
public ISave<T> where T : BusinessObject
{
[OperationContract(Name="Save")]
void Save(T obj);
}

public class SaveCustomer : ISave<Customer>
{
public void Save(Customer obj) { /* Do stuff here */ }
}

那么生成的配置应该类似于 web.config 中的以下内容文件(假设 basicHttpBinding ):

<service name="SaveCustomer">
<endpoint
address="http://localhost:8001/SaveCustomer/"
binding="basicHttpBinding"
contract="ISave`1[[FullyQualifiedNamespaceTo.Customer, AssemblyName, Version=1.0.0.0, Culture=neutral, PublicKeyToken=....]]"
/>
</service>

我找到了这个 here在对已接受答案的评论中。显然,您需要提供自己的程序集名称、版本、文化和 PublicKeyToken。如果您没有 PublicKeyToken,我相信您可以将其关闭。

因此,似乎通过声明 ServiceContractAttribute在你的 ISave<T>接口(interface),然后在名为 SaveCustomer 的类中实现该接口(interface)导致名为 SaveCustomer 的服务(这就是我相信你所追求的)。尽管在 web.config 中指定时,您可能不得不摆弄用于泛型类型的语法。文件。

因此,如果您有另一个服务类,例如:

public class SaveOrder : ISave<Order>
{
public void Save(Order obj) { /* Do stuff here */ }
}

那么您应该以另一个服务端点配置结束:

<service name="SaveOrder">
<endpoint
address="http://localhost:8001/SaveOrder/"
binding="basicHttpBinding"
contract="ISave`1[[FullyQualifiedNamespaceTo.Order, AssemblyName, Version=1.0.0.0, Culture=neutral, PublicKeyToken=....]]"
/>
</service>

HTH.

关于c# - 如何替换 ServiceContract 和 OperationContract 的命名约定?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22254734/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com