C# 如何重写或向单独类中的方法添加属性,以便刷新WCF服务不会';不要把我的零钱挥霍掉?

C# 如何重写或向单独类中的方法添加属性,以便刷新WCF服务不会';不要把我的零钱挥霍掉?,c#,asp.net,asp.net-core,wcf,asp.net-core-mvc,C#,Asp.net,Asp.net Core,Wcf,Asp.net Core Mvc,我有许多WCF服务,我正在用代理包装它们,并且我为每个服务使用自动生成的契约类 我看到有一些存根(例如,static partial void ConfigureEndpoint),我可以将它们放在一个单独的类中,但是当我更新/刷新WCF服务时,我做了其他契约更改,这些更改会被吹走。我对C#/ASP.NET-Core的某些上下文非常陌生 下面是合同中的一个更改示例,其中我添加了一个属性以默认公司…如何通过WCF刷新以某种方式保持该属性 [DefaultValue(Constants.De

我有许多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
,因为我不希望它以虚张声势的形式显示,并且此字段是一个常量。当我刷新WCF时,它返回为
public

    internal string PartitionKey // I changed public to internal
    {
        get
        {
            return this.partitionKeyField;
        }
        set
        {
            this.partitionKeyField = value;
        }
    }

假设您添加了一个服务引用,VisualStudio生成了一个名为
MyServiceClient
的代理。它可能看起来有点像这样:

[System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")]
public partial class MyServiceClient : System.ServiceModel.ClientBase<MyService>
{

现在,在c#的其余部分中,不要使用
MyServiceClient
,而是始终使用
MyModifiedServiceClient
。刷新服务引用时,派生类不会被覆盖。

我现在正在测试。看起来我只需要复制我想要隐藏的方法,并将
internal new
放在它们前面,然后我就可以用我想要的属性来装饰它们了。我希望我可以做一个
覆盖
,这样我就可以调用基本方法,但是我必须用
虚拟
修改生成的契约方法,除非有更简单的方法,否则每次都会被覆盖。这看起来可能是我应该做的正确方式。所以我的问题似乎与生成的合同有关,而不是客户(除非我做错了?)。我已经创建了派生合同类,所以我有了
MyContract:MyContract
,但是当我去提出我的客户请求时,它说“Type
MyContract
不是预期的”,因为它预期
MyContract
。那么,我是否必须复制/粘贴几乎整个生成的类才能持久化更改?我已经创建了
[Required,DefaultValue(Constants.DefaultCompany)]公共新字符串Company{get{return base.Company;}set{base.Company=value;}}}
以使字段成为必需字段。它告诉我使用
xmlclude
来识别意外的类型?我认为您不能更改合同。从服务器的角度来看,这将导致WCF调用无效。你为什么要给它们添加方法?我只想做三件事。需要、隐藏和默认合同值。我尝试过使用
modelmatatype
,但它只适用于
DefaultValue
属性,而不适用于
Required
属性,原因是什么?如果我将
Required
属性移动到实际的合同中,它工作得很好…所以我认为这是一些奇怪的错误?这种方法很有前途,但我不知道一旦修改合同,我如何使用。
public class MyModifiedServiceClient : MyServiceClient
{
    //Make changes here
}