我使用代理包装了许多 WCF 服务,并且我为每个服务使用自动生成的合同类。
我看到有一些存根(例如 static partial void ConfigureEndpoint
)可以放在一个单独的类中,但是我做了其他合同更改,当我更新/刷新 WCF 服务时这些更改会被吹走。对于某些上下文,我对 C#/ASP.NET-Core 非常陌生。
合同中的示例更改如下,我添加了一个属性来默认公司...如何通过 WCF 刷新以某种方式保留此属性?
[DefaultValue(Constants.DefaultCompany), Required] // I added this because I want to default a company
public string Company
{
get
{
return this.companyField;
}
set
{
this.companyField = value;
}
}
我所做的另一个示例更改是将此方法的 public
更改为 internal
,因为我不希望它在 Swagger 中显示并且该字段是一个常量。当我刷新 WCF 时,它返回为 public
。
internal string PartitionKey // I changed public to internal
{
get
{
return this.partitionKeyField;
}
set
{
this.partitionKeyField = value;
}
}
假设您添加了一个服务引用,并且 Visual Studio 生成了一个名为 MyServiceClient
的代理。它可能看起来像这样:
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")]
public partial class MyServiceClient : System.ServiceModel.ClientBase<MyService>
{
如您所见,如果您修改 MyServiceClient
,您的修改将在您刷新服务引用时被覆盖。为了解决这个问题,不要直接修改它。相反,将其子类化。
public class MyModifiedServiceClient : MyServiceClient
{
//Make changes here
}
现在在您的 c# 的其余部分中,不要使用 MyServiceClient
,而是始终使用 MyModifiedServiceClient
。刷新服务引用时,派生类不会被覆盖。