私はVisual Studio 2010とMS SQL Server 2005を使用しています。私はWCFを初めて使用しています。小さなタスク管理アプリケーション"トランスポート接続からデータを読み取ることができません:既存の接続がリモートホストによって強制的に閉じられました
私はそれ 内部の2つのコンソールアプリケーションとソリューション持っている瞬間 - 。WCFサービス - クライアントがWCFサービスに接続私のコードをテストするには、
WCFサービスは、に接続しdb to LINQ to SQLを使用しています。 WCFサービスの背後にあるデータベースに何かを挿入して動作させるOperationContractを実装しました。私は、WCFサービスからクライアントにGUIDを返すOperationContractを実装しました。これも動作します。
私はそれが次のエラーで失敗したWCFサービスからリストの一覧を取得しよう:ローカルホストへのHTTPレスポンスを受信している間
」エラーが発生しました:8000/TaskerTest /サービス/オペレーションこれは、HTTPプロトコルを使用しないサービスエンドポイントのバインディングによるものである可能性があります。これは、HTTP要求コンテキストがサーバーによって中断されたために発生する可能性があります。
InnerException:基になる接続が閉じられました。
私の契約(最初の2つの仕事。 GetLists)が問題です:
実装:
public List<ToDoList> GetLists() {
Guid token = OperationContext.Current.IncomingMessageHeaders.GetHeader<Guid>("token", "ns");
int? userID = CheckCache(token);
if (userID != null) {
List<ToDoList> lst = DBAccess.GetListsByUserId(userID.Value);
return lst;
}
else
return null;
}
DBアクセスコード:
public static List<ToDoList> GetListsByUserId(int idCredential) {
TaskerModelDataContext tmdc = new TaskerModelDataContext();
List<ToDoList> lists = tmdc.ToDoLists.Where(entry => entry.id_Credential == idCredential).ToList<ToDoList>();
return lists;
}
そして、クライアントコード(WCFサービスは、にサービス参照として追加されますクライアントプロジェクト):
TaskerService.LoginClient test2 = new LoginClient();
string username = "usr1", password = "psw1";
test2.ClientCredentials.UserName.UserName = username;
test2.ClientCredentials.UserName.Password = password;
Guid result = Guid.Empty;
try {
result = test2.CheckCredentials(username, password);
Console.WriteLine("Login OK!");
}
catch (Exception e) {
Console.WriteLine(e.Message);
}
TaskerService.OperationsClient client = new OperationsClient();
using(OperationContextScope contextScope = new OperationContextScope(client.InnerChannel)) {
Guid testToken = result; Console.WriteLine(testToken.ToString());
MessageHeader<Guid> mhg = new MessageHeader<Guid>(testToken);
MessageHeader untyped = mhg.GetUntypedHeader("token", "ns");
OperationContext.Current.OutgoingMessageHeaders.Add(untyped);
client.GetLists();
}
client.Close();
上記の例外が発生してクライアントが失敗する:client.GetLists();
私は、読者が必要に応じて追加の詳細を提供できます。
ありました:私はその後、私は生成されるログにMicrosoftサービストレースビューアを実行すると、次のエラーを持っている
<system.diagnostics>
<trace autoflush="true" />
<sources>
<source name="System.ServiceModel"
switchValue="Information, ActivityTracing"
propagateActivity="true">
<listeners>
<add name="sdt"
type="System.Diagnostics.XmlWriterTraceListener"
initializeData= "SdrConfigExample.e2e" />
</listeners>
</source>
</sources>
</system.diagnostics>
でのトレースなってきました
UPDATE
パラメータを直列化しようとしているときにエラーが発生しました。私は今追加した
を期待されていない//schemas.datacontract.org/2004/07/System 『:のhttp:のInnerExceptionメッセージは、『データコントラクト名を持つ』「タイプ』 System.DelegateSerializationHolder + DelegateEntry DelegateSerializationHolder.DelegateEntryました[DataContract]を "ToDoList"クラスのdbmlファイルに追加しましたが、今は例外が発生しません。クライアントで正しい結果が得られますが、各クラスの内容は空であるようです。