WCF+WebService:生成2个字段以表示1个整数
-
09-10-2019 - |
题
在我的WCF服务中,我有“ int”参数的方法:
[OperationContract]
PublishResult PublishEnrollmentProfile(
string siteName, int methodId,...
);
当我创建对此WCF服务的Web服务引用时,生成了以下签名:
[System.Web.Services.Protocols.SoapDocumentMethodAttribute("...",
RequestNamespace="...", ResponseNamespace="...",
Use=System.Web.Services.Description.SoapBindingUse.Literal,
ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)]
[return: System.Xml.Serialization.XmlElementAttribute(IsNullable=true)]
public PublishResult PublishEnrollmentProfile(
[System.Xml.Serialization.XmlElementAttribute(IsNullable=true)]
string siteName,
int methodId,
[System.Xml.Serialization.XmlIgnoreAttribute()]
bool methodIdSpecified, ...)
{
object[] results = this.Invoke("PublishEnrollmentProfile", new object[] {
siteName,
deployServerName,
methodId,
methodIdSpecified,
deviceClass,
deviceName,
registrationCode});
return ((PublishResult)(results[0]));
}
您可以看到,我得到的不是一个整数参数,而是我得到的2个:integer(for value)和bool(如果指定了值,则标记')。
这个可以吗?为什么我需要第二个参数(bool)?
非常感谢!
解决方案
指定的“字段仅在构造的可选参数上生成。(int,dateTime,十进制等)。所有这些变量都将在指定的名称中生成其他变量。
由于仅在可选参数上生成“指定”字段,因此,如果将publishenrollmentProfile方法放置在数据合同内部的publishenRollmentProfile方法并将dataMember属性设置为[datamember(isrequired = true)],则指定的字段应消失,除非这是一个可选的字段,在这种情况下,您希望将其保留。
这是一个 博客帖子 有一些样本。
更新
因此,您有运营合同。
[OperationContract]
PublishResult PublishEnrollmentProfile(string siteName, int methodId,...);
如果该方法的参数不是可选的,则应创建一个数据合同并重新定义“合同”类似:
{
[OperationContract]
PublishResult PublishEnrollmentProfile(PublishEnrollmentProfileRequest request);
}
然后,您将其数据合同如此。
[DataContract]
public class PublishEnrollmentProfileRequest
{
private string _siteName;
[DataMember]
public string siteName
{
get;
set;
}
private int _methodId;
[DataMember(IsRequired=True)]
public int methodId
{
get;
set;
}
.
.
.
}
因此,您有一个“请求”对象,该对象传递到具有字段名称和MethodID的WCF服务中。在我提供的示例中,现在需要MethodID,这将弹出“指定”字段。
不隶属于 StackOverflow