WCF+ウェブサービス: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]));
}
1つの整数パラメーターの代わりに、2:Integer(for value)とbool(Mark 'の場合は、値が指定されている場合)を持っていることがわかります。
これでいい?なぜ2番目のパラメーター(BOOL)が必要なのですか?
どうもありがとう!
解決
指定された「フィールドは、構造体であるオプションのパラメーターでのみ生成されます。(int、datetime、decimalなど)。そのような変数はすべて、指定された名前で追加の変数を生成します。
「指定された」フィールドはオプションのパラメーターでのみ生成されるため、PublishEnrollmentProfileメソッドのパラメーターをデータコントラクトの内側に配置し、MethodIDのDatamember属性を[Datamember(IsRequired = true)]に設定した場合、指定されたフィールドが消える必要があります。これはオプションの分野であり、その場合、あなたはそれをどのようにしても残したいと思うでしょう。
これが次のとおりです ブログ投稿 いくつかのサンプル付き。
アップデート
したがって、操作契約があります。
[OperationContract]
PublishResult PublishEnrollmentProfile(string siteName, int methodId,...);
そのメソッドのパラメーターがオプションでない場合は、DataContractを作成し、次のようにOperationContractを再定義する必要があります。
{
[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;
}
.
.
.
}
したがって、フィールドSiteNameとMethodIDを持つWCFサービスに渡す「要求」オブジェクトがあります。 MethodIDが必要になった例では、これが「指定された」フィールドを排除します。