0

一部の Web サービスを asmx から WCF にアップグレードしました。アプリケーションで Web サービスへの呼び出しを変更する必要があります。コントラクト名とメソッド名と署名は同じです。asmx Web サービスの呼び出しから svc Web サービス (WCF) に移行する簡単な方法はありますか?

     internal XmlDocument ServiceCall()
     {
        WebResponse reponseWeb = null;
        string strReponse = string.Empty;

        HttpWebRequest webRequest = this.CreateWebQuery();

        XmlDocument soapEnvelopeXml = this.CreerEnveloppeSoap();

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

        XmlDocument xmlSoapRequest = new XmlDocument();

        try
        {
            reponseWeb = webRequest.GetResponse();
        }
        catch (System.Exception ex)
        {
            throw ex;
        }

        Stream str = reponseWeb.GetResponseStream();
        StreamReader sr = new StreamReader(str);

        xmlSoapRequest.Load(sr);
        return xmlSoapRequest;
     }

    private HttpWebRequest CreateWebQuery()
    {
        HttpWebRequest webRequest = (HttpWebRequest)WebRequest.Create(this.UrlServiceWeb);
        webRequest.Headers.Add("SOAPAction", "\"" + this.UrlHost + this.WCFNameContrat + "/" + this.MethodeWeb + "\"");
        webRequest.ContentType = "application/soap+xml; charset=utf-8";
        webRequest.Accept = "text/xml";
        webRequest.Method = "POST";
        return webRequest;
    }

    private XmlDocument CreerEnveloppeSoap()
    {
        XmlDocument soapEnvelop = new XmlDocument();

        string appelMethode = "<" + this.MethodeWeb + " xmlns=" + "\"" + this.UrlHote + this.WCFNomContrat + "\"" + ">";

        string strParametres = string.Empty;
        foreach (Parametre param in this.Parametres)
        {
            strParametres = strParametres + "<" + param.Nom + ">" + param.Valeur + "</" + param.Nom + ">";
        }

        appelMethode = appelMethode + strParametres + "</" + this.MethodeWeb + ">";

        StringBuilder sb = new StringBuilder(_enveloppeSoap);
        sb.Insert(sb.ToString().IndexOf("</soap12:Body>"), appelMethode);

        // Get XML
        soapEnvelop.LoadXml(sb.ToString());
        return soapEnvelop;
    }

.config ファイルの Web サービス アドレスを変更しようとしたところ、次のエラーが表示されました。

(415) Cannot process the message because the content type 'application/soap+xml; charset=utf-8' was not the expected type 'text/xml; charset=utf-8'..

したがって、CreateWebQuery メソッドで次のように変更しました。

 webRequest.ContentType = "application/soap+xml; charset=utf-8" 

 webRequest.ContentType from "text/xml;charset=utf-8"

Web サービス呼び出しは以下を返しました:

The remote server returned an error: (400) Bad Request.

私は WCF サービスに精通していません。助けていただければ幸いです。

ありがとう。

4

1 に答える 1

0

使用しているバインディングは何ですか? それが BasicHttpBinding であることを確認してください - そうすれば、クライアントで何も変更する必要がないかもしれません

于 2013-05-09T21:37:35.680 に答える