在没有代理的情况下调用WCF服务方法

时间:2011-07-07 05:45:52

标签: wcf wcf-proxy

无论如何,我可以在不添加服务引用甚至根本没有代理的情况下调用WCF服务。

3 个答案:

答案 0 :(得分:0)

简要回答:

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

您可以选择使用“添加服务引用”创建代理,也可以在代码中创建代理 - 但是您需要代理 - 无法解决此问题。

答案 1 :(得分:0)

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

请查看此article。可能需要讨论几点,但​​这个想法就在这里。

This question也可能有帮助。

答案 2 :(得分:0)

您可以使用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;
}