gpt4 book ai didi

c# - 如何在没有 ServiceHost 类的情况下使用 WCF 创建简单的 Web 服务器?

转载 作者:行者123 更新时间:2023-11-30 22:45:12 25 4
gpt4 key购买 nike

我已经开始学习 WCF 并希望通过直接使用 channel 堆栈创建一个简单的 Web 服务器来了解其内部结构。我在网上找到了很多理论,但我希望看到一个接收和响应 httprequest 的工作示例代码,我可以使用任何浏览器对其进行测试。 我希望通过组装绑定(bind)元素一直到响应请求来显示自定义绑定(bind)的设置。

最佳答案

在 MSDN 论坛中得到答案:

static void RunService()
{
//Step1: Create a custom binding with just TCP.
BindingElement[] bindingElements = new BindingElement[2];
bindingElements[0] = new WebMessageEncodingBindingElement();
bindingElements[1] = new HttpTransportBindingElement();

CustomBinding binding = new CustomBinding(bindingElements);


//Step2: Use the binding to build the channel listener.
IChannelListener<IReplyChannel> listener =
binding.BuildChannelListener<IReplyChannel>(new Uri("http://localhost:8080/channelapp"),
new BindingParameterCollection());

//Step3: Listening for messages.
listener.Open();
Console.WriteLine(
"Listening for incoming channel connections");

//Wait for and accept incoming connections.
IReplyChannel channel = listener.AcceptChannel();
Console.WriteLine("Channel accepted. Listening for messages");

//Open the accepted channel.
channel.Open();

//Wait for and receive a message from the channel.
RequestContext request= channel.ReceiveRequest();

//Step4: Reading the request message.
Message message = request.RequestMessage;
Console.WriteLine("Message received");
Console.WriteLine("To: {0}", message.Headers.To); // TO contains URL from the browser including query string
if (!message.IsEmpty) // HTTP GET does not contain body
{
string data = message.GetBody<string>();
Console.WriteLine("Message content: {0}", data);
}

//Send a reply - You can control reply content based on message.Header.To or by message content
Message replymessage = Message.CreateMessage(binding.MessageVersion,
"http://contoso.com/someotheraction", XElement.Parse("<html><body><h1>Hello</h1></body></html>"));

// Set reply content type
HttpResponseMessageProperty property = new HttpResponseMessageProperty();
property.Headers[System.Net.HttpResponseHeader.ContentType] = "text/html; charset=utf-8";
replymessage.Properties[HttpResponseMessageProperty.Name] = property;

request.Reply(replymessage);

//Step5: Closing objects.
//Do not forget to close the message.
message.Close();
//Do not forget to close RequestContext.
request.Close();
//Do not forget to close channels.
channel.Close();
//Do not forget to close listeners.
listener.Close();
}

( http://social.msdn.microsoft.com/Forums/en/wcf/thread/09b620e0-ea81-4a6c-8a10-02a032ccd821 )

关于c# - 如何在没有 ServiceHost 类的情况下使用 WCF 创建简单的 Web 服务器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3159213/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com