【问题标题】:Wcf service not returning cookiesWcf 服务不返回 cookie
【发布时间】:2012-09-09 11:06:46
【问题描述】:

我正在开发一个 Windows Phone 应用程序。它需要对站点进行身份验证。我将用户名和密码发送到 WCF 服务,该服务将检查身份验证。

服务端代码:

Service.svc.cs

public CookieContainer GetConnect(string uid, string password)
//public string GetConnect(string uid, string password)
{
    try
    {
         HttpWebRequest req = (HttpWebRequest)WebRequest.Create("http://example.com/Login1.action");
        req.Method = "POST";
        CookieContainer con = new CookieContainer();
        req.CookieContainer = con;
        req.CookieContainer.Add(GetCookies());
        req.KeepAlive = true;

        req.UserAgent = "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/536.11 (KHTML, like Gecko) Chrome/20.0.1132.57 Safari/536.11";
        req.ContentType = "application/x-www-form-urlencoded";
        req.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8";

        req.Referer = "http://example.com/content/index.html";

        byte[] data = Encoding.Default.GetBytes("username=" + uid + "&password=" + password);
        req.Credentials = new NetworkCredential(uid, password);
        req.ContentLength = data.Length;
        req.AllowAutoRedirect = true;
        req.ServicePoint.Expect100Continue = true;

        string str = req.GetRequestStream();
        str.Write(data, 0, data.Length);
        str.Close();

        HttpWebResponse res = (HttpWebResponse)req.GetResponse();

        string iduri = System.Web.HttpUtility.ParseQueryString(res.ResponseUri.Query).Get("id");
        if (iduri != "")
        {
            return con; 
            //return "Success";
        }
        else
        {
            res.Close();
            str.Close();

            return null;
            //return "Fail";
        }
    }
    catch (Exception)
    {
        return null;
    }
}

IService.cs

[ServiceContract]
public interface IService1
{
    [OperationContract]
    CookieCollection GetCookies();

    [OperationContract]
    CookieContainer GetConnect(string uname, string password);
    //string GetConnect(string uname, string password);
}

客户端代码:

Login.xaml.cs

void svc_Get_Connected(object send, GetConnectCompletedEventArgs e)
{
    var cc = new CookieContainer();
    cc=e.Result;
}

当我重新调整 con 对象时,它会出现以下错误:

http://example.com:3922/Service1.svc 上没有可以接受消息的端点监听。这通常是由不正确的地址或 SOAP 操作引起的。有关更多详细信息,请参阅 InnerException(如果存在)。”

如何返回CookieContainer

【问题讨论】:

  • 您的问题有点难以阅读 - 如果您处理格式,删除不相关(注释)代码会有所帮助。请注意,您可以随时编辑您的问题。无论哪种方式,我都不清楚整个 cookie 与问题有什么关系:您发布的错误表明您的端点配置有问题?
  • 所以你想从 WCF 服务方法返回CookieContainer?您只能返回由DataContractDataMember 属性修饰的类。
  • 是的,我想返回 CookieContainer

标签: c# .net wcf windows-phone-7.1


【解决方案1】:

您需要装饰您的返回对象类,以便 WCF 可以对其进行序列化,例如:

[DataContract]
public class CookieContainer 
{
    [DataMember]
    public string SomeProperty { get; set; }
    [DataMember]
    public string SomeOtherProperty { get; set; }
    // you get the idea...
}

不要忘记构建您的服务,运行它,然后刷新客户端服务引用或手动重新生成客户端代理代码和配置。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多