我有一个非常奇怪的场景,我似乎无法弄清楚发生了什么。我有一个用C#编写的Web服务,目标框架是3.5。我有很多类和方法但为了简单起见,我将在问题中只使用两个类。
public class PathNames
{
private string _pathA = "Some Path";
private string _pathB = "Another Path";
public string BaseDirectoryPath
{
get
{
return Path.Combine(_pathA, _pathB);
}
}
}
第二节课如下:
public class UserInformation
{
public string UserName { get; set; }
...//more properties
}
上述两个类都在同一个namespace
中。
Web服务在WebForm应用程序中引用,目标框架为4.0。一切似乎都运行正常,当我在UserInformation
中查看时,我可以看到Object Browser
类。但是PathNames
类似乎在Object Broswer
中不可见。
有问题的两个源文件都在Compile
窗口中设置为File Properties
。我有5个类似于UserInformation
的类和File Properties
窗口中的相同设置,它们只是简单的POCO,只有公共汽车。这些都似乎正在通过,我可以访问它们并在Object Browser
中看到它们。由于一些奇怪的原因,我不能PathNames
上课。我试图添加一些新的虚拟类,并且与PathNames
类具有相同的问题。有人可以告诉我,我做错了吗。
Web服务旧ASMX
正在通过VS添加服务参考
使用VS 2017专业版 - 15.6.7版。
发布后,如果我对dll进行解编译,那么PathNames
类就在那里。所以它显然在dll中。
我看过 this ,但仍然没有运气。
答案 0 :(得分:4)
在网络服务中使用数据合同
服务不能公开私有/只读属性。 DataMember属性用于标记使用DataContract属性标记的类的公共成员或属性(带有公共getter和setter)。 DataContract可用作参数或操作的返回值。
Windows Communication Foundation( WCF )默认使用名为Data Contract Serializer的序列化引擎来序列化和反序列化数据(将数据转换为XML或从XML转换),以及< strong> XML序列化(默认情况下)不会序列化read = only属性。
有关详细信息,您可以阅读MS Docs for Data Contracts: - https://docs.microsoft.com/en-us/dotnet/framework/wcf/feature-details/using-data-contracts
要了解各种数据合同限制,请参阅: - https://docs.microsoft.com/en-us/dotnet/framework/wcf/feature-details/types-supported-by-the-data-contract-serializer
解决方案:
反正。你想做什么?公开属性意味着您期望某些有状态行为。 如果您打算在操作合同中使用此属性,那么您必须使用public getter和setter 定义属性,以便可以序列化。
正如Nikosi中所述的@ previous answer,您必须为BaseDirectoryPath属性定义公共设置器。
答案 1 :(得分:2)
基于示例的唯一区别是,一个属性为.button-blue {
height: 20px;
width: 20px;
background-color: blue;
}
.button-red {
height: 20px;
width: 20px;
background-color: red;
}
,而另一个属性可以修改。
为了使类可序列化,请考虑实现属性
readonly
您可以使用默认构造函数来设置属性的默认值
或者只是在属性上有一个空的setter
public class PathNames {
private string _pathA = "Some Path";
private string _pathB = "Another Path";
public PathNames() {
BaseDirectoryPath = Path.Combine(_pathA, _pathB);
}
public string BaseDirectoryPath { get; set; }
}
答案 2 :(得分:1)
您可以看到creating a Custom ASP.NET Web Service的方式。 您是否需要重建Web服务ASP.Net并将程序集添加到全局程序集缓存(GAC)。
我希望这对你有所帮助。