사용자 지정 IHttpModule을 사용하는 ASP.net 프로젝트가 있습니다. 이 모듈은 파이프 라인에 앉아 특정 기준이 일치하면 동일한 컴퓨터의 간단한 C# 콘솔 응용 프로그램에서 호스팅되는 WCF 서비스에서 메서드를 호출해야합니다.IIS ASP.net IHttpModule의 WCF 채널 활용
모듈에 대한 코드는 다음과 같습니다 :
using System;
using System.Collections.Generic;
using System.Text;
using System.Web.SessionState;
using System.Web;
using System.Diagnostics;
using System.IO;
using System.Runtime.Serialization.Formatters.Binary;
using System.Configuration;
using System.ServiceModel;
using SimpleFarmStateServer;
namespace SimpleFarm
{
public class SimpleFarmModuleSS : IHttpModule, IRequiresSessionState
{
protected string cache_directory = "";
// WCF
ChannelFactory<IStateServer> factory;
IStateServer channel;
public void Dispose() { }
public void Init(System.Web.HttpApplication context)
{
context.PreRequestHandlerExecute += new EventHandler(context_PreRequestHandlerExecute);
setupFactory();
}
void setupFactory()
{
factory = new ChannelFactory<IStateServer>(
new NetNamedPipeBinding(),
"net.pipe://localhost/StateServer");
}
void context_PreRequestHandlerExecute(object sender, EventArgs e)
{
try
{
if (factory.State != CommunicationState.Opened)
setupFactory();
channel = factory.CreateChannel();
channel.LogAccess("Hello World!");
}
catch (Exception ex)
{
}
finally
{
factory.Close();
}
}
}
}
내 문제는 이것이 처음 실행하는 것입니다,하지만 후속 시도는이 오류 메시지
통신 개체, 시스템을 야기한다. ServiceModel.Channels.ServiceChannel, 은 오류 상태이므로 통신 에 사용할 수 없습니다.
나는 뭔가 잘못하고있는 것처럼 보입니다. 그리고 나는 WCF를 처음 접했을 가능성이 매우 높습니다.
저는 ChannelFactory가 다시 생성되는 것을 둘러싼 문제라고 생각합니다. 오류가 발생한 상태가됩니다.
주요 문제를 제거하는 데 도움이됩니다. 감사합니다 tomasr. 이제 사이트 내의 각기 다른 페이지에 대해 새로운 HTTPModule 인스턴스가 만들어 질 때마다 약간의 차이가 있습니다. 이 새 인스턴스는 "각 소켓 주소 (프로토콜/네트워크 주소/포트)의 한 용도 만 정상적으로 허용됩니다"예외 (다른 인스턴스가 연결되어 있기 때문에)라는 이유로 명명 된 파이프에 연결할 수 없습니다. – justacodemonkey
HttpModules는 항상 여러 인스턴스를 사용합니다. 또한 클라이언트 채널이 누출됩니다. 당신은 공장이 아니라 채널을 닫을뿐입니다 (필요에 따라 공장을 캐시해야합니다) – tomasr
내 시나리오에서 공장을 캐시하는 방법에 대한 아이디어가 있습니까? – justacodemonkey