【问题标题】:Invoking WCF service methods without having a proxy在没有代理的情况下调用 WCF 服务方法
【发布时间】:2011-07-07 18:22:56
【问题描述】:

我是否可以在不添加服务引用甚至根本没有代理的情况下调用 WCF 服务。

【问题讨论】:

    标签: wcf wcf-proxy


    【解决方案1】:

    您可以使用 HttpWebRequest 调用服务。下面的例子:-

    private static XDocument CallSoapServiceInternal(string uri, string soapAction, string contentType, XDocument reqXml)
    {
        var req = (HttpWebRequest)WebRequest.Create(uri);
        req.ContentType = contentType;
        req.Method = "POST";
        req.Headers.Add("SOAPAction", soapAction);
        req.Credentials = CredentialCache.DefaultCredentials;
        req.Timeout = 20000;
        //req.Timeout = System.Threading.Timeout.Infinite;
    
        using (var reqStream = req.GetRequestStream())
        {
            reqXml.Save(reqStream);
        }
    
        string respStr;
    
        try
        {
            using (var resp = (HttpWebResponse)req.GetResponse())
            {
                using (var rdr = new StreamReader(resp.GetResponseStream()))
                {
                    respStr = rdr.ReadToEnd();
                }
            }
        }
        catch (Exception ex)
        {
            throw new Exception("Error getting service response.", ex);
        }
    
        Console.WriteLine(respStr);
        Assert.IsTrue(respStr.Length > 0, "Nothing returned");
    
        var respXml = XDocument.Parse(respStr);
        return respXml;
    }
    

    【讨论】:

    • 谢谢。这就是我要找的。​​span>
    • System.ServiceModel 是否有类可以很容易地构建/发送 Soap 消息?
    • 找到这个.. 使用 SoapSender 和 SoapReceiver 类发送和接收 SOAP 消息msdn.microsoft.com/en-us/library/ms824662.aspx
    【解决方案2】:

    简要回答:

    WCF 是基于在客户端和被调用的服务之间建立代理这一非常基本的原则。你不能“绕过”这个。

    您可以选择使用添加服务引用创建代理,或者在代码中创建它 - 但您需要一个代理 - 没有办法。

    【讨论】:

      【解决方案3】:

      如果您问这个问题,则表示您可能对动态代理生成感兴趣。

      请看一下这个article。有几点可能需要讨论,但想法就在这里。

      This question 也可能有帮助。

      【讨论】:

      • 你是对的。我试图在运行时创建代理。感谢您的链接。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-10-22
      • 2023-04-06
      • 2011-08-02
      • 1970-01-01
      • 2012-04-20
      • 2018-03-11
      • 1970-01-01
      相关资源
      最近更新 更多