Return CookiesContainer object from WCF service to client

I want to return CookiesContainer object from WCF service but I cann't return. I can return string from service.

Here is my Web.config

<?xml version="1.0" encoding="UTF-8"?>
<configuration>

 <system.web>
  <compilation debug="true" targetFramework="4.0" />
    <authentication mode="Windows">
        <forms cookieless="UseCookies" requireSSL="false" />
    </authentication>
 </system.web>

<system.serviceModel>

<services>
  <service name="WcfService1.Service1" behaviorConfiguration="ServiceBehaviour">
    <endpoint address="" binding="basicHttpBinding" bindingConfiguration="" contract="WcfService1.IService1" />

    <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
  </service>
</services>

<behaviors>
  <serviceBehaviors>
    <behavior name="ServiceBehaviour">
     <!--behavior>-->
      <serviceMetadata httpGetEnabled="true" />
      <serviceDebug includeExceptionDetailInFaults="true" />
    </behavior>
  </serviceBehaviors>
</behaviors>

<client>
  <endpoint address="http://localhost/WcfService1/Service1.svc"
    binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_IService1"
    contract="ServiceReference1.IService1" name="BasicHttpBinding_IService1" />
</client>

<bindings>
  <basicHttpBinding>
    <binding name="BasicHttpBinding_IService1" closeTimeout="00:01:00"
      openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00"
      allowCookies="true" bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard"
      maxBufferSize="65536" maxBufferPoolSize="524288" maxReceivedMessageSize="65536"
      messageEncoding="Text" textEncoding="utf-8" transferMode="Buffered"
      useDefaultWebProxy="true">
      <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384"
        maxBytesPerRead="4096" maxNameTableCharCount="16384" />
      <security mode="None">
        <transport clientCredentialType="None" proxyCredentialType="None"
          realm="" />
        <message clientCredentialType="UserName" algorithmSuite="Default" />
      </security>
    </binding>
  </basicHttpBinding>
</bindings>

    <serviceHostingEnvironment multipleSiteBindingsEnabled="true" />
</system.serviceModel>

<system.webServer>
   <modules runAllManagedModulesForAllRequests="true" />
</system.webServer>

</configuration>

Here is my IService1.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.ServiceModel.Web;
using System.Text;
using System.Net;
using System.IO;
using System.Web;

namespace WcfService1
{
// NOTE: You can use the "Rename" command on the "Refactor" menu to change the interface name "IService1" in both code and config file together.
[ServiceContract]
public interface IService1
{
    [OperationContract]
    CookieCollection GetCookies();

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

Here is my Service1.svc.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.ServiceModel.Web;
using System.Text;
using System.Net;
using System.IO;
using System.Web;

namespace WcfService1
{
// NOTE: You can use the "Rename" command on the "Refactor" menu to change the class name "Service1" in code, svc and config file together.
public class Service1 : IService1
{
    public CookieCollection GetCookies()
    {
        HttpWebRequest req;
        CookieCollection cc = new CookieCollection();
        req = null;

        req = (HttpWebRequest)WebRequest.Create("http://site5.way2sms.com/");
        req.CookieContainer = new CookieContainer();
        // req.CookieContainer.Add(cc);

        req.CookieContainer.Add(cc);
        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://site5.way2sms.com/content/index.html";

        req.AllowAutoRedirect = true;
        req.ServicePoint.Expect100Continue = true;

        return ((HttpWebResponse)req.GetResponse()).Cookies;
    }

    public CookieContainer GetConnect(string uid, string password)
    //public string GetConnect(string uid, string password)
    {
        HttpWebRequest req;
        HttpWebResponse res;
        Stream str;


        //try
        //{
            req = (HttpWebRequest)WebRequest.Create("http://site5.way2sms.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://site5.way2sms.com/content/index.html";

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

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


            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 ex)
        //{

        //}
    }
  }
 }

Here is my Login.xaml.cs

    private void btnSignin_Click(object sender, RoutedEventArgs e)
    {
        string uid = txtUsername.Text.Trim();
        string password = txtPassword.Password.Trim();

        networkIsAvailable = Checknetwork();
        if (networkIsAvailable)
        {
            MessageBox.Show("Network Avaliable", "Avaliable", MessageBoxButton.OK);
            //svc.GetcookiesCompleted += new EventHandler<GetcookiesCompletedEventArgs>(svc_Get_Cookies);
            //svc.GetcookiesAsync(); 

            txtblockcheck.Visibility = Visibility.Visible;
            svc.GetConnectCompleted += new EventHandler<GetConnectCompletedEventArgs>(svc_Get_Connected);
            svc.GetConnectAsync(uid, password);
        }
        else
        {
            MessageBox.Show("Please check your network", "Warning", MessageBoxButton.OK);
        }
    }


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

When I return CookiesContainer from service I get this following error

There was no endpoint listening at http://localhost:3922/Service1.svc that could accept the message. This is often caused by an incorrect address or SOAP action. See InnerException, if present, for more details.

I doesn't understand how can I return CookiesContainer Object from service to client can anybuddy tell me ?

Answers


If nothing else, to help debug it, I would run the serialization manually. CookieContainer is not XmlSerializable (but is Soap Serializable so that shouldn't be the problem really) but I never like sending anything other than POCO objects that I write over webservices.

Here is my generic serialization methods, maybe just feed it the byte array, or Convert.ToBase64String() and return that. If nothing else this will absolutely confirm that your webservice is working as expected.

Using the methods i have below:

public byte[] GetConnect(string uid, string password)
{
    ...

    if (iduri != "")
    {
        return SerializeObject(con);
    }
}

-

void svc_Get_Connected(object send, GetConnectCompletedEventArgs e)
{
    CookieContainer con = DeserializeObject<CookieContainer >(e.Result);
}

-

public static byte[] SerializeObject<T>(T obj)
{
    try
    {
        using (MemoryStream memoryStream = new MemoryStream())
        {
            BinaryFormatter xs = new BinaryFormatter();
            xs.Serialize(memoryStream, obj);

            return memoryStream.ToArray();
        }
    }
    catch
    {
        return null;
    }
}
public static T DeserializeObject<T>(byte[] xml)
{
    BinaryFormatter xs = new BinaryFormatter();
    MemoryStream memoryStream = new MemoryStream(xml);
    return (T)xs.Deserialize(memoryStream);
}

Need Your Help

Core-Plot: Initially axis labels not on major ticks

label core-plot

Something peculiar is happening on my scatterplot graphs. When the graph loads initially, the labels of the x and y axes are shown between the major tick marks (actually a bit more toward one than ...

Choose a specific java version for neo4j or cocoon

java neo4j freebsd apache-coccoon

I'm currently running cocoon on my FreeBSD server (9.2) I'm using this version of java :

About UNIX Resources Network

Original, collect and organize Developers related documents, information and materials, contains jQuery, Html, CSS, MySQL, .NET, ASP.NET, SQL, objective-c, iPhone, Ruby on Rails, C, SQL Server, Ruby, Arrays, Regex, ASP.NET MVC, WPF, XML, Ajax, DataBase, and so on.