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

2024-05-26

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


在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 http://social.msdn.microsoft.com/Forums/en/wcf/thread/09b620e0-ea81-4a6c-8a10-02a032ccd821)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在没有 ServiceHost 类的情况下使用 WCF 创建简单的 Web 服务器? 的相关文章

  • 动态加载程序集的应用程序配置

    我正在尝试将模块动态加载到我的应用程序中 但我想为每个模块指定单独的 app config 文件 假设我的主应用程序有以下 app config 设置
  • 秒表有最长运行时间吗?

    多久可以Stopwatch在 NET 中运行 如果达到该限制 它会回绕到负数还是从 0 重新开始 Stopwatch Elapsed返回一个TimeSpan From MSDN https learn microsoft com en us
  • Asp.NET WebApi 中类似文件名称的路由

    是否可以在 ASP NET Web API 路由配置中添加一条路由 以允许处理看起来有点像文件名的 URL 我尝试添加以下条目WebApiConfig Register 但这不起作用 使用 URIapi foo 0de7ebfa 3a55
  • BitTorrent 追踪器宣布问题

    我花了一点业余时间编写 BitTorrent 客户端 主要是出于好奇 但部分是出于提高我的 C 技能的愿望 我一直在使用理论维基 http wiki theory org BitTorrentSpecification作为我的向导 我已经建
  • OleDbDataAdapter 未填充所有行

    嘿 我正在使用 DataAdapter 读取 Excel 文件并用该数据填充数据表 这是我的查询和连接字符串 private string Query SELECT FROM Sheet1 private string ConnectStr
  • 使用 WebClient 时出现 System.Net.WebException:无法创建 SSL/TLS 安全通道

    当我执行以下代码时 System Net ServicePointManager ServerCertificateValidationCallback sender certificate chain errors gt return t
  • 创建链表而不将节点声明为指针

    我已经在谷歌和一些教科书上搜索了很长一段时间 我似乎无法理解为什么在构建链表时 节点需要是指针 例如 如果我有一个节点定义为 typedef struct Node int value struct Node next Node 为什么为了
  • 如何设计以 char* 指针作为类成员变量的类?

    首先我想介绍一下我的情况 我写了一些类 将 char 指针作为私有类成员 而且这个项目有 GUI 所以当单击按钮时 某些函数可能会执行多次 这些类是设计的单班在项目中 但是其中的某些函数可以执行多次 然后我发现我的项目存在内存泄漏 所以我想
  • 使用 x509 证书签署 json 文档或字符串

    如何使用 x509 证书签署 json 文档或字符串 public static void fund string filePath C Users VIKAS Desktop Data xml Read the file XmlDocum
  • 向现有 TCP 和 UDP 代码添加 SSL 支持?

    这是我的问题 现在我有一个 Linux 服务器应用程序 使用 C gcc 编写 它与 Windows C 客户端应用程序 Visual Studio 9 Qt 4 5 进行通信 是什么very在不完全破坏现有协议的情况下向双方添加 SSL
  • 如何从两个不同的项目中获取文件夹的相对路径

    我有两个项目和一个共享库 用于从此文件夹加载图像 C MainProject Project1 Images 项目1的文件夹 C MainProject Project1 Files Bin x86 Debug 其中有project1 ex
  • 通过指向其基址的指针删除 POD 对象是否安全?

    事实上 我正在考虑那些微不足道的可破坏物体 而不仅仅是POD http en wikipedia org wiki Plain old data structure 我不确定 POD 是否可以有基类 当我读到这个解释时is triviall
  • cmake 将标头包含到每个源文件中

    其实我有一个简单的问题 但找不到答案 也许你可以给我指一个副本 所以 问题是 是否可以告诉 cmake 指示编译器在每个源文件的开头自动包含一些头文件 这样就不需要放置 include foo h 了 谢谢 CMake 没有针对此特定用例的
  • 基于 OpenCV 边缘的物体检测 C++

    我有一个应用程序 我必须检测场景中某些项目的存在 这些项目可以旋转并稍微缩放 更大或更小 我尝试过使用关键点检测器 但它们不够快且不够准确 因此 我决定首先使用 Canny 或更快的边缘检测算法 检测模板和搜索区域中的边缘 然后匹配边缘以查
  • 混合 ExecutionContext.SuppressFlow 和任务时 AsyncLocal.Value 出现意外值

    在应用程序中 由于 AsyncLocal 的错误 意外值 我遇到了奇怪的行为 尽管我抑制了执行上下文的流程 但 AsyncLocal Value 属性有时不会在新生成的任务的执行范围内重置 下面我创建了一个最小的可重现示例来演示该问题 pr
  • IEnumreable 动态和 lambda

    我想在 a 上使用 lambda 表达式IEnumerable
  • 哪种 C 数据类型可以表示 40 位二进制数?

    我需要表示一个40位的二进制数 应该使用哪种 C 数据类型来处理这个问题 如果您使用的是 C99 或 C11 兼容编译器 则使用int least64 t以获得最大的兼容性 或者 如果您想要无符号类型 uint least64 t 这些都定
  • C# - OutOfMemoryException 在 JSON 文件上保存列表

    我正在尝试保存压力图的流数据 基本上我有一个压力矩阵定义为 double pressureMatrix new double e Data GetLength 0 e Data GetLength 1 基本上 我得到了其中之一pressur
  • Windows 和 Linux 上的线程

    我在互联网上看到过在 Windows 上使用 C 制作多线程应用程序的教程 以及在 Linux 上执行相同操作的其他教程 但不能同时用于两者 是否存在即使在 Linux 或 Windows 上编译也能工作的函数 您需要使用一个包含两者的实现
  • C++ 标准是否指定了编译器的 STL 实现细节?

    在写答案时this https stackoverflow com questions 30909296 can you put a pimpl class inside a vector我遇到了一个有趣的情况 这个问题演示了这样一种情况

随机推荐

  • 在 Cordova 中单击 html 按钮时启动新活动

    我正在尝试使用 Cordova 和 Java 构建 Android 应用程序 我想构建当在 HTML 代码中单击按钮时启动新 Intent 的意图 这是我的 HTML 代码 h2 Hello Android h2
  • Aptana Python stdlib 与 virtualenv 的问题

    我最近开始开发一个项目 仅使用 vim 作为我的文本编辑器和 virtualenv 设置 我从 GitHub 在此 virtualenv 上安装了一些 API 最终 项目变得有点大了 超出了 vim 的处理能力 所以我不得不将项目移动到 I
  • iOS 5 核心数据冻结

    我尝试做以下简单的事情 NSArray entities context executeFetchRequest inFetchRequest error fetchError 没有什么花哨 但这在 iOS 5 中冻结 在 iOS 4 中工
  • Kubeadm 加入失败:无法请求集群信息

    我有两台服务器作为本地服务器网络上的主节点和工作节点 master node 10 20 20 214 worker node 10 20 20 218 在主节点中 我成功使用 kubeadm init 设置 Calico 网络 它报告消息
  • 如何清除组合框?

    我有一些组合框设置为下拉列表 用户可以在其中选择一个数字 我还有一个清除按钮 应该清除组合框中的文本 但我似乎无法得到它 我试过了 doesn t work cboxHour Text and doesn t work cboxHour R
  • Maven 快速入门指南 [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我的任务是为工作中的新程序设置开发环境 领导者选择 Eclipse 作为其 OSGi 支持的 IDE 并选择 Maven 作为构建实用程序
  • 如何在 Rails 中格式化日期时间?

    在我的 Rails 视图中 我有以下显示日期时间的代码 该行的结果如下 2013 02 02 01 00 00 UTC 我该如何更改它 使其显示为 2 2 13 X 00 PST 使用红宝石的strftime 关于日期 日期时间 看一下文档
  • Kafka Streams - 如何扩展 Kafka 存储生成的变更日志主题

    我有多个冗余应用程序实例 它们想要使用主题的所有事件并独立存储它们以进行磁盘查找 通过rocksdb 为了便于论证 我们假设这些冗余消费者正在服务无状态 http 请求 因此 负载不是使用 kafka 共享的 而是使用 kafka 将数据从
  • DirectX::SpriteFont/SpriteBatch 阻止 3D 场景绘制

    我使用时遇到问题DirectX SpriteFont DirectX SpriteBatch 来自 DirectXTK 与此处讨论的问题完全相同 使用 SpriteFont 类绘制文本时出现问题 https stackoverflow co
  • 是否可以仅使用一个实例来创建片段

    我只是想知道 片段创建只能有一个实例或单例吗 我经历了谷歌iosched项目也 他们只是简单地创造 Fragment a new Fragment 每当他们想要 假设例如 public static FragmentManager inst
  • 从文件中读取行,处理它,然后将其删除

    我有一个 22mb 的文本文件 其中包含数字列表 每行 1 个数字 我试图让 python 读取数字 处理数字并将结果写入另一个文件中 所有这些都有效 但如果我必须停止该程序 它就会从头开始 我一开始尝试使用mysql数据库 但它太慢了 我
  • 使用 PIP 从 Github 安装 Python 包

    我已经看到文档表明您可以通过以下方式使用 pip 安装托管 Python 包的 Github sudo pip install e git git github com myuser myproject git egg myproject
  • 水晶报表参数选择有限制吗?

    我正在尝试根据按用户分组的 Oracle 数据库制作 Crystal Reports 11 报告 我有超过一千个用户 我想创建一个参数字段 提示用户选择他们想要查看其结果的用户 但是我的参数选择字段仅显示 221 个可能的用户 由于 SQL
  • 为什么这个 rspec 请求规范不更新模型?

    我有一个与用户模型交互的请求规范 我想确保具有管理员角色的用户可以创建 编辑 销毁用户 我现在遇到一个问题 编辑操作无法更新用户 当我手动执行网站本身的操作时 一切正常 但测试无法更新用户 这是我的规格 it edits a user do
  • 当我的 Mac 进入睡眠状态时,我的应用程序会发生什么情况?

    当 Mac OS X 进入睡眠状态时 由于关闭笔记本电脑或从 Apple 菜单中选择 睡眠 它如何暂停正在执行的进程 我认为非窗口进程只是在任意执行点挂起 对于 Cocoa 应用程序来说也是如此 还是操作系统会等到控制权返回到运行循环调度程
  • 如何从 Java jar 文件中读取资源文件?

    我正在尝试从作为桌面应用程序运行的单独 jar 访问 jar 文件中的 XML 文件 我可以获得所需文件的 URL 但是当我将其传递给 FileReader 作为字符串 时 我收到 FileNotFoundException 提示 文件名
  • 找出 Maven 使用的编译器

    您知道我如何找到 Maven 使用哪些 JDK 来编译我的项目吗 mvn version会吐出maven的版本和它正在使用的jdk
  • 为什么 astyanax (java) 无法识别我的 scala 案例类参数列表中的 @Id 注解值?

    所以这是我的困境 我有一个域模型 其中有一堆 scala 中的案例类 例如User and Organization 在我的数据访问层 dao 存储库等 中 我使用 astyanax 来自 netflix 的 java 库 及其实体持久器将
  • iOS 版本中的 Twitter 个人资料屏幕是如何构建的?

    我想知道 Twitter 是如何实现其个人资料屏幕的 起初我以为它是一个带有标题 个人资料信息 和部分标题 用于选择推文 媒体 收藏夹的分段控件 的表格视图 这对我来说是有意义的 因为当用户向下滚动时 配置文件信息消失 但分段控件保留 而这
  • 如何在没有 ServiceHost 类的情况下使用 WCF 创建简单的 Web 服务器?

    我已经开始学习 WCF 并希望通过直接使用通道堆栈创建一个简单的 Web 服务器来了解其内部结构 我在网络上找到了很多理论 但我希望看到一个接收和响应 httprequest 的工作示例代码 我可以使用任何浏览器进行测试 我希望能够通过组装