0

シリアル化されたデータをクライアント アプリケーションに送信する MVC4 アプリケーションを作成しています。

クライアント側コード

クライアントのコードは次のとおりです。

public static void GetMalicousExtensions(string User_ID, string UC, string   Implementation_ID)
    {
try
{
    System.Diagnostics.Debug.WriteLine("GetMalExt Running");
    //Call to MVC4 server.
    WebRequest request = WebRequest.Create(string.Format("http://localhost:35555/Secure/SendExtensions?User_ID={0}&UC={1}&Implementation_ID={2}"
        , User_ID
        , UC
        , Implementation_ID
        ));
    System.Diagnostics.Debug.WriteLine("Request initialized.");
    request.Method = "GET";
    System.Diagnostics.Debug.WriteLine("Method set.");
    request.Timeout = 10000;//10 seconds for debug, switch to 5 for release.
    BinaryFormatter serializer = new BinaryFormatter();
    System.Diagnostics.Debug.WriteLine("Serializer initialized.");
    System.Diagnostics.Debug.WriteLine("Getting the stream.");
    //The object of type BlockExtension is in a shared file.
    BlockedExtension bTest = ((BlockedExtension)serializer.Deserialize(request.GetResponse().GetResponseStream(), null));
    //request.
    System.Diagnostics.Debug.WriteLine("GetMalExt de-serialized");
}
catch (Exception ex)
{
    System.Diagnostics.Debug.WriteLine("Exception: " + ex.Message);
}
}

サーバー側コード

    [HttpGet]
    [ValidateInput(false)]
    public ActionResult SendExtensions(Guid User_ID, string UC, string Implementation_ID)
    {
        System.Diagnostics.Debug.WriteLine("----Send Serialized Malicious Extensions----");
        string ipAddress = Utility.GetIPAddress();
        System.Diagnostics.Debug.WriteLine("IP: " + ipAddress);
        string Country = GeoIPHelper.GetCountryCode(ipAddress);
        System.Diagnostics.Debug.WriteLine("Country: " + GeoIPHelper.GetCountryCode(ipAddress));
        System.Diagnostics.Debug.WriteLine("User ID: " + User_ID);
        System.Diagnostics.Debug.WriteLine("User Class: " + UC);
        System.Diagnostics.Debug.WriteLine("Implementation ID: " + Implementation_ID);
        try
        {
            using (ValidationManager manager = new ValidationManager())
            {

                //Grab the users installed malicious applications. (Extensions + Programs)
                List<CheckUserExtensionsResult> userExts = manager.CheckUserExtensions(User_ID);
                System.Diagnostics.Debug.WriteLine("Got data from DB.");

                //using (var stream = new StreamWriter(Request.InputStream))
                {
                    //Convert the list into an object.
                    List<BlockedExtension> sList = ConvertToSerializableList(userExts);
                    BlockedExtension bTest = sList.First<BlockedExtension>();
                    System.Diagnostics.Debug.WriteLine("Converted to serializable list.");

                    //Serializer.
                    BinaryFormatter serializer = new BinaryFormatter();
                    System.Diagnostics.Debug.WriteLine("Set up serializer.");

                    //Send the serialized object.
                    System.Diagnostics.Debug.WriteLine("Sending data.");
                    //serializer.Serialize(Response.OutputStream, sList);
                    serializer.Serialize(Response.OutputStream, bTest);
                    System.Diagnostics.Debug.WriteLine("Data sent.");

                }

            }
        }
        catch (Exception ex)
        {
            _log.Error(ex.Message, ex);
        }

        return new EmptyResult();
    }

コンソールからの出力

クライアント側で発生するエラーは次のとおりです。

  • タイプ 'System.Runtime.Serialization.SerializationException' の初回例外が mscorlib.dll で発生しました
  • 例外: アセンブリ 'MainClass.Web、Version=1.0.0.0、Culture=neutral、PublicKeyToken=null' が見つかりません。

共有クラス ファイル

using System;
using System.Runtime.Serialization;
namespace Installer.Helpers
{
    [Serializable()]
    public class BlockedExtension : ISerializable
{
    string Extension_Name = "";
    public BlockedExtension(string Extension_Name)
    {
        this.Extension_Name = Extension_Name;
    }
    public BlockedExtension(SerializationInfo info, StreamingContext ctxt)
    {

    }
    public void GetObjectData(SerializationInfo info, StreamingContext ctxt)
    {

    }
}
}

どんな助けでも素晴らしいでしょう、ありがとう。

4

1 に答える 1

0

クライアント側プロジェクトへの参照を含めることができます。それは私のために働いた

于 2013-10-23T09:26:09.017 に答える