1

ASP .NETプロジェクトからワークフローサービスを呼び出す際に、サービスリファレンスをasp .netプロジェクトに追加せずに呼び出そうとしています。私はサービスとして追加せずにWebサービスを呼び出す方法の例を見つけ、ワークフローサービスの要求に応じて変更しました。それを動作させることは可能ですか?c#サービス参照なしのHttpRequestによるワークフローサービスの呼び出し

public void Execute() 
{ 
    HttpWebRequest request = CreateWebRequest(); 
    XmlDocument soapEnvelopeXml = new XmlDocument(); 
    soapEnvelopeXml.LoadXml(@"<?xml version=""1.0"" encoding=""utf-8""?> 
     <soap:Envelope xmlns:soap=""http://schemas.xmlsoap.org/soap/envelope/"" xmlns:xsi=""http://www.w3.org/2001/XMLSchema-instance"" xmlns:xsd=""http://www.w3.org/2001/XMLSchema""> 
     <soap:Body> 
      <GetData xmlns=""http://tempuri.org/IService/GetData""> 
       <string xmlns=""http://schemas.microsoft.com/2003/10/Serialization/"">test1234</string> 
      </GetData> 
     </soap:Body> 
     </soap:Envelope>"); 


    using (Stream stream = request.GetRequestStream()) 
    { 
     soapEnvelopeXml.Save(stream); 
    } 

    using (WebResponse response = request.GetResponse()) 
    { 
     using (StreamReader rd = new StreamReader(response.GetResponseStream())) 
     { 
      string soapResult = rd.ReadToEnd(); 
      Console.WriteLine(soapResult); 
     } 
    } 
} 

public HttpWebRequest CreateWebRequest() 
{ 
    HttpWebRequest webRequest = (HttpWebRequest)WebRequest.Create(@"http://localhost:3724/Service1.xamlx"); 
    webRequest.Headers.Add(@"SOAP:Action"); 
    webRequest.ContentType = "text/xml;charset=\"utf-8\""; 
    webRequest.Accept = "text/xml"; 
    webRequest.Method = "POST"; 
    return webRequest; 
} 

私は( "のhttp:// localhostを:3724/Service1.xamlx" @)のHttpWebRequest WebRequestクラス=(HttpWebRequestの)WebRequest.Create上のエラーを取得します;.エラー:内部サーバーエラーです。 それを動作させる方法に関するアイデアはありますか?

+0

(私は、ワークフローサービスを考えますちょうどWCFサービスですか?)後で手動で石鹸封筒を作る必要がなくなり、サービス参照が不要になります。これは簡単な方法かもしれません。 – kmp

答えて

1

私がWCFを使用しなかった頃、私は独自のクライアントプロキシクラスを制御するために自動生成されたWebサービス参照プロキシ(別名reference.cs)のコードを抽出しました。 結果は(読みやすさのために申し訳ありません)WSのGetRessourceメソッドを呼び出す以下のクラスのように見えた:あなたはHttpWebRequestのを使用する必要があるとのChannelFactoryを使用できない理由があるの

[System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "2.0.50727.42")] 
[System.ComponentModel.DesignerCategoryAttribute("code")] 
[System.Xml.Serialization.XmlInclude(typeof(Ressource))]  
[System.Web.Services.WebServiceBindingAttribute(Name = "WSSoap", Namespace = "http:/tempuri.org/Web/WS/WS.asmx")] 
public class RemoteManager : System.Web.Services.Protocols.SoapHttpClientProtocol 
{ 
    public RemoteManager() { 
     this.Url = "http://localhost/web/WS/WS.asmx"; 
     if ((this.IsLocalFileSystemWebService(this.Url) == true)) 
     { 
      this.UseDefaultCredentials = true; 
      this.useDefaultCredentialsSetExplicitly = false; 
     } 
     else 
     { 
      this.useDefaultCredentialsSetExplicitly = true; 
     } 
    } 

    [System.Web.Services.Protocols.SoapDocumentMethodAttribute("http:/tempuri.org/Web/WS/WS.asmx/" + 
     "GetRessource", RequestElementName = "GetRessource", RequestNamespace = "http:/tempuri.org/Web/WS/WS.asmx", ResponseElementName = "GetRessourceResponse", ResponseNamespace = "http:/tempuri.org/Web/WS/WS.asmx", Use = System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle = System.Web.Services.Protocols.SoapParameterStyle.Wrapped)] 
    [return: System.Xml.Serialization.XmlElementAttribute("GetRessourceResult")] 
    public Ressource GetRessource(int ressId) 
    { 
     object[] results = this.Invoke("GetRessource", new object[] { 
        ressId}); 
     return ((Ressource)(results[0])); 
    } 

    public new string Url 
    { 
     get 
     { 
      return base.Url; 
     } 
     set 
     { 
      if ((((this.IsLocalFileSystemWebService(base.Url) == true) 
         && (this.useDefaultCredentialsSetExplicitly == false)) 
         && (this.IsLocalFileSystemWebService(value) == false))) 
      { 
       base.UseDefaultCredentials = false; 
      } 
      base.Url = value; 
     } 
    } 

    private bool useDefaultCredentialsSetExplicitly;   
    public new bool UseDefaultCredentials 
    { 
     get 
     { 
      return base.UseDefaultCredentials; 
     } 
     set 
     { 
      base.UseDefaultCredentials = value; 
      this.useDefaultCredentialsSetExplicitly = true; 
     } 
    }    
} 
関連する問題