アベルのおかげで、私はそれを理解することができました。以下は解決策です。これが他の誰かに役立つことを願っています。
また、asp.net のサービス参照を右クリックし、[サービス参照の構成] をクリックして、[コレクション タイプ] を Systems.Collections.Generic.List に設定する必要があることに注意してください。
これがasp.netで関数を呼び出す方法です
Item NewItem = new Item();
foreach (GridViewRow PendingItemUnderControl in GridViewPendingList.Rows)
{
NewItem.Paramater = PendingItemUnderControl.Cells[0].Text.ToLower();
NewItem.Type = (String)Session["BrowseType"];
lstNewItems.Add(NewItem);
}
ControlFiles_Result = Client.FilesToControl(lstNewItems);
lstItems の定義は、asp.net では次のとおりです。
List<Item> lstNewItems = new List<Item>(); // Control Items
アベルは、ASP プロジェクトの先頭に参照を追加する必要があると言って正しかったです。また、アイテムは WCF アプリケーションで宣言されているため、次の行で参照しているため、asp.net で宣言する必要はありません。
using test.ServiceReference1;
IJobs.cs のコードを WCF に保存します。テストに関しては、プライベートとパブリックに注意してください。これらはすべてパブリックにあり、大混乱を引き起こしました。
using System.Runtime.Serialization;
using System.ServiceModel;
using System.Text;
using System.ComponentModel;
using System.Data;
using System.IO;
using System.Collections;
namespace WCFJobsLibrary
{
// NOTE: You can use the "Rename" command on the "Refactor" menu to change the interface name "IJobs" in both code and config file together.
[ServiceContract]
public interface IJobs
{
//Directoy Manager
[OperationContract]
ReturnClass FindDrives();
//Directoy Manager
[OperationContract]
ReturnClass FindSubfolders(String Folder_To_Search);
//Directoy Manager
[OperationContract]
ReturnClass FindSubFiles(String Folder_To_Search);
//Directoy Manager
[OperationContract]
ReturnClass FilesToControl(List<Item> ItemsToControl);
}
[DataContract]
// [KnownType(typeof(List<Item>))]
[KnownType(typeof(Item))]
public class Item
{
public Item(string Paramater, string Type)
{
_Paramater = Paramater;
_Type = Type;
}
private string _Paramater;
[DataMember]
public string Paramater
{
get { return _Paramater; }
set { _Paramater = value; }
}
private string _Type;
[DataMember]
public string Type
{
get { return _Type; }
set { _Type = value; }
}
}
}
そして、Jobs.cs - 動作していることを確認するための簡単なテストを行います。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.Text;
using System.ComponentModel;
using System.Data;
using System.IO;
using System.Collections;
using System.Web;
using Microsoft.Win32;
namespace WCFJobsLibrary
{
// NOTE: You can use the "Rename" command on the "Refactor" menu to change the class name "Jobs" in both code and config file together.
public class Jobs : IJobs
{
#region IJobs Members
//Files Manager
public ReturnClass FilesToControl(List<Item> lstNewItems)
{
try
{
String ThisisAnItemToControl = "";
String ThisIsItsType = "";
for (int i = 0; i < lstNewItems.Count; i++) // Loop through List with for
{
ThisisAnItemToControl = lstNewItems[i].Paramater;
ThisIsItsType = lstNewItems[i].Type;
}
return new ReturnClass(1, ThisisAnItemToControl, String.Empty, null, null, null);
}
catch (Exception ex)
{
return new ReturnClass(-1, ex.Message.ToString(), ex.InnerException.ToString(), null, null, null);
}
}
}
#endregion
最後に、ReturnClass.cs クラスの ReturnClass の定義
using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.Text;
using System.ComponentModel;
using System.Data;
using System.IO;
using System.Collections;
using System.Web;
using Microsoft.Win32;
namespace WCFJobsLibrary
{
public class ReturnClass
{
//private members
private int _errorCode;
private string _errorMessage;
private string _exMessage;
private ArrayList _drives;
private string[] _folders;
private string[] _filePaths;
#region Constructors
//constructor 1
public ReturnClass()
{
}
//constructor 2
public ReturnClass(int iErr, string sErrMsg, string ExMsg, ArrayList arrDrives, string[] sfolders, string[] sFilePaths)
{
ErrorCode = iErr;
ErrorMessage = sErrMsg;
ExMessage = ExMsg;
Drives = arrDrives;
Folders = sfolders;
FilePaths = sFilePaths;
}
#endregion
#region methods
//Error Code
public int ErrorCode
{
get { return this._errorCode; }
set { this._errorCode = value; }
}
//error message
public string ErrorMessage
{
get { return this._errorMessage; }
set { this._errorMessage = value; }
}
//exception message
public string ExMessage
{
get { return this._exMessage; }
set { this._exMessage = value; }
}
//drives
public ArrayList Drives
{
get { return this._drives; }
set { this._drives = value; }
}
//folders
public string[] Folders
{
get { return this._folders; }
set { this._folders = value; }
}
//File Paths
public string[] FilePaths
{
get { return this._filePaths; }
set { this._filePaths = value; }
}
#endregion
}
}