Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/wcf/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 带有';内部';集合访问器变为不可见_C#_Wcf - Fatal编程技术网

C# 带有';内部';集合访问器变为不可见

C# 带有';内部';集合访问器变为不可见,c#,wcf,C#,Wcf,在客户端,我只看到TaskID属性。我不明白为什么“ID”属性不可见? 如果我删除“内部”,它会工作。但我需要它是内在的 我的错,我应该提到这是WCF 谢谢你的回答。我意识到我正在尝试的是不可能的。如果删除内部修饰符,setter将具有公共可见性。内部元素对位于同一程序集中的类型可见,因此如果您的客户端位于另一个程序集中,则setter将不可见。为什么说客户端,是指从web服务返回类?如果是这种情况,.NET要求getter和setter都是公共的,以便在XML序列化操作中包含属性。假设您的请

在客户端,我只看到TaskID属性。我不明白为什么“ID”属性不可见? 如果我删除“内部”,它会工作。但我需要它是内在的

我的错,我应该提到这是WCF



谢谢你的回答。我意识到我正在尝试的是不可能的。

如果删除
内部
修饰符,setter将具有
公共
可见性。内部元素对位于同一程序集中的类型可见,因此如果您的客户端位于另一个程序集中,则setter将不可见。

为什么说客户端,是指从web服务返回类?如果是这种情况,.NET要求getter和setter都是公共的,以便在XML序列化操作中包含属性。

假设您的请求类是DataContract,则所有属性都必须具有公共getter和setter。否则,在“另一方”构建类是不可能的。因此,它不能是DataContract。

使用内部修饰符只能访问: 由同一程序集中的任何代码执行,但不是来自另一个程序集

如果您在派生类中引用它,则使用

public class Request
{
    public string ID { get; internal set; }
    public int TaskID { get; set; }

    public Request()
    {
        ID = System.Guid.NewGuid().ToString();
    }
}
另一种方式是

您需要使用InternalsVisibleTo属性使程序集成为好友

假设您没有对程序集进行签名,只需将程序集级别InternalsVisibleTo属性添加到名为VB.Net程序集的C#项目中即可。通常在AssemblyInfo.cs(属性文件夹下)中执行此操作


嗯,;假设这是一项服务,一种解决方法是为客户端提供某种哈希令牌而不是真实ID,然后,在收到客户端的请求后,您可以按令牌查找真实ID,或者在他们更改它时引发异常。

假设您使用的是WCF,此对象的代理将只包含同时具有公共getter和setter的项。您无法真正绕过这个问题,因为在反序列化对象时,服务器端代理需要调用setter。如果您不担心反序列化,您可以创建一个不执行任何操作的setter并将其公开,并创建一个充当真正setter的内部函数。

成员只能从同一程序集中访问。您将无法从存在于不同程序集中的代码中使用它们。您所说的“客户端”是什么意思?您使用WCF吗?您的意思是“在客户端”,setter应该可以访问与请求相同程序集中的任何类。整个属性是否不可见,还是其setter不可见?
Protected internal
[assembly:InternalsVisibleTo("MyVbAssemblyName")]