wsdl.exe
ツールを使用してSOAPクラスを生成しました。残念ながら、特定のURLにバインドされているようで、インスタンスごとに変更できる必要があります(同じインターフェイスを共有する複数のURLに接続できるようにしたい)。だから、私はそのようなコードを変更したいと思います:
/// <remarks/>
[System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")]
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.ComponentModel.DesignerCategoryAttribute("code")]
[System.Web.Services.WebServiceBindingAttribute(Name="Service1Soap", Namespace="http://productmarket.bigbrain.math.uni.lodz.pl/")]
public partial class Service1 : System.Web.Services.Protocols.SoapHttpClientProtocol {
// some code here
/// <remarks/>
[System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://productmarket.bigbrain.math.uni.lodz.pl/Authenticate", RequestNamespace="http://productmarket.bigbrain.math.uni.lodz.pl/", ResponseNamespace="http://productmarket.bigbrain.math.uni.lodz.pl/", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)]
public bool Authenticate(int ContractorId, string Password) {
object[] results = this.Invoke("Authenticate", new object[] {
ContractorId,
Password});
return ((bool)(results[0]));
}
// more code here
}
Authenticateの属性(HTTP URLを持つ属性)が可変になるようにします。私がこれまでに見つけた唯一の解決策は、Service1クラス内に静的な文字列を作成し、次のようにAuthenticateコードを変更することです。
/// <remarks/>
[System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")]
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.ComponentModel.DesignerCategoryAttribute("code")]
[System.Web.Services.WebServiceBindingAttribute(Name="Service1Soap", Namespace="http://productmarket.bigbrain.math.uni.lodz.pl/")]
public partial class Service1 : System.Web.Services.Protocols.SoapHttpClientProtocol {
//some code
public static string prefix = "http://productmarket.bigbrain.math.uni.lodz.pl/";
public static string soap_namespace = "http://productmarket.bigbrain.math.uni.lodz.pl/";
/// <remarks/>
[System.Web.Services.Protocols.SoapDocumentMethodAttribute(Service1.prefix+"Authenticate", RequestNamespace=Service1.soap_namespace, ResponseNamespace=Service1.soap_namespace, Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)]
public bool Authenticate(int ContractorId, string Password) {
object[] results = this.Invoke("Authenticate", new object[] {
ContractorId,
Password});
return ((bool)(results[0]));
}
//some code
}
リクエストごとにインスタンスを変更するのではなく、インスタンスからこの情報を取得するより良いソリューションはありますか?私はC#の属性の概念を正確に理解していないことを認めなければなりません。