JSON 和 SOAP WCF 服务?

2024-02-15

我最近将 WCF SOAP 服务转换为 REST/JSON 服务。正如回复中详细说明的here https://stackoverflow.com/questions/10232509/can-i-generate-a-service-reference-automatically-for-a-rest-wcf-service,Visual Studio 的“添加服务引用”功能无法为 JSON 服务生成代码。该问题的答案中的链接文章暗示了将 WCF 公开为 REST 和 SOAP 来解决该问题的可能性,但它没有提供任何详细信息。

有谁知道这是否可行,如果可以,如何设置?

总是可以选择自己编写一个代码生成器,它读取 WCF REST 服务的 WSDL 并生成 C# 类,但似乎应该有比这更简单的解决方案。

以供参考, 我的网络配置:

<system.serviceModel>
<behaviors>
  <endpointBehaviors>
    <behavior name="RestBehavior">
      <webHttp />
    </behavior>
  </endpointBehaviors>
  <serviceBehaviors>
    <behavior name="GetBehavior" >
      <serviceMetadata httpGetEnabled="true" />
      <serviceDebug
         httpHelpPageEnabled="true"
         includeExceptionDetailInFaults="true"
      />
    </behavior>
  </serviceBehaviors>
</behaviors>
<bindings>
  <webHttpBinding>
    <binding name="WebHttpBinding">
      <security mode="TransportCredentialOnly">
        <transport clientCredentialType="None" />
      </security>
    </binding>
  </webHttpBinding>
</bindings>
<services>
  <service name="Service" behaviorConfiguration="GetBehavior">
    <endpoint address=""
      binding="webHttpBinding"
      behaviorConfiguration="RestBehavior"
      contract="IService"
      bindingConfiguration="WebHttpBinding">
    </endpoint>
  </service>
</services>
</system.serviceModel>

我的服务方法都具有以下属性:

[WebInvoke(RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.Wrapped)]

有可能,您需要创建两个端点:一个用于soap,另一个用于json。我已经在我的项目中做到了这一点,并且可以通过 SoapUI 或 Fiddler (json) 同时访问服务,这里是示例配置:

<system.serviceModel>
 <behaviors>
  <serviceBehaviors>
   <behavior name="BehaviourService">
    <serviceMetadata httpGetEnabled="true" />
     <serviceDebug includeExceptionDetailInFaults="false" />
    </behavior>
  </serviceBehaviors>
  <endpointBehaviors>
      <behavior name="BehaviourWebHttp">
        <webHttp  defaultBodyStyle="Wrapped" automaticFormatSelectionEnabled="True" faultExceptionEnabled="True" />
      </behavior>
  </endpointBehaviors>
</behaviors>

<services>
  <service name="NameSpace.MyService" behaviorConfiguration="BehaviourService" >
    <endpoint address ="soap" binding="basicHttpBinding" contract="NameSpace.IMyService"></endpoint>
    <endpoint binding="webHttpBinding" behaviorConfiguration="BehaviourWebHttp" contract="NameSpace.IMyService" ></endpoint>
    <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/>
    <host>
      <baseAddresses>
        <add baseAddress="http://localhost:7689/MyService.svc"/>
      </baseAddresses>
    </host>
  </service>
</services>
<serviceHostingEnvironment multipleSiteBindingsEnabled="true" />
</system.serviceModel>

还要让你的合同看起来像:

[OperationContract]
[WebInvoke(BodyStyle = WebMessageBodyStyle.Wrapped, UriTemplate = "MyMethod", Method = "POST")]
bool MyMethod();

然后你可以通过“localhost:7689/MyService.svc?wsdl”访问SAP,并通过JSON访问 “本地主机:7689/MyService.svc/MyMethod”

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

JSON 和 SOAP WCF 服务? 的相关文章

随机推荐

  • noexcept 在派生类中的用法

    我在使用时遇到问题noexcept派生类上的说明符 更准确地说 当父类是抽象类时 具有protected构造函数 以下是我声明类的方式的示例 With a public基类中的构造函数 一切正常 与相同的代码protected并且派生类不再
  • 协程中的热流和冷流是什么以及它们之间的区别?

    我正在掌握 Kotlin 协程并试图弄清楚 1 什么是热流和冷流 2 它们之间的主要区别是什么 3 什么时候使用每一个 冷流在开始收集值之前不会开始产生值 另一方面 热流立即开始产生值 我建议阅读以下内容以了解热蒸汽和冷蒸汽的使用 http
  • 如何删除 Windows Phone 8.1 应用程序中的动态磁贴标题?

    我正在 BackgroundTask 中使用 TileWide310x150Image 模板构建一个宽动态图块 它应该只显示宽图像 不显示文本或其他内容 这是我正在使用的模板
  • 如何预分配和初始化 `std::basic_string` 内的字符序列?

    我想知道如何在普通 C 字符串中预分配和初始化字符序列 提出这个问题的场合是查询 Windows 注册表中的值 看这个答案 https stackoverflow com a 16304707 1794538一些示例代码 问题在于系统调用写
  • 如何以编程方式对黑/白 UIImageView 进行着色?

    我有一组黑白图像 如下所示 如果我没记错的话 有某种方法可以设置 UIImage 的混合或遮罩属性以将其与背景 UIView 混合 在这种情况下 我想将该图像的颜色更改为红色以表示生命值 如何以编程方式更改此 UIImage 的颜色 我知道
  • 用于多行文本的 Java 注释实用程序

    WRT 多行 Java 字符串的任何未来计划 https stackoverflow com questions 11659225 any future plans for multiline java string 编写一个执行以下操作的
  • Python文件下载

    我遇到了问题 不确定这是否可能 所以是否有人可以指出我正确的方向 我需要从网页打开一个文件 在 Excel 中打开它并保存该文件 我在网站上遇到的问题是文件名有一个文件名 不是活动链接 然后它会有一个 下载 按钮 该按钮不特定于我需要下载的
  • 为什么 .tfignore 根本不起作用?

    我按照中的说明进行操作这篇微软文章 https www visualstudio com docs tfvc add files server customize which files are ignored by version con
  • Oracle:将 IPv4 地址转换为数字?

    如何将点十进制格式的 IPv4 地址转换为数字 例如 地址39 255 2 51应转换为4026466867 使用 regexp substr 提取地址的四个八位字节 通过将八位位组移回其原始位置来重构该值 正则表达式可能相对昂贵 因此如果
  • 如何在一个EC2实例上运行多个应用程序?

    这可能与这个问题有关 如何在一个 EC2 实例上运行多个应用程序 https stackoverflow com questions 16549026 how to run more than one app on one instance
  • Gradle 包装器标签不匹配错误

    我正在尝试使用 gradle 及其包装器手动配置 Android 项目 但我总是遇到相同的错误 我可以生成gradlew脚本如下build gadle file buildscript repositories jcenter depend
  • sqlite3 运行 sql - 选择所有带有 PUA 字符的

    我怎样才能运行 SELECT FROM 表名 其中列包含 PUA 字符 PUA https en wikipedia org wiki Private Use Areas 私人使用区域 在 Unicode 中 专用区域 PUA 是一系列代码
  • 在AngularJS中如何使用datalist

    div div
  • 使 tkinter 窗口在全屏应用程序之上绘制

    我想知道是否有一种方法可以在全屏应用程序上绘制 tkinter 窗口 到目前为止我有这个 from tkinter import MAIN WINDOW root Tk root title Test Title root geometry
  • 如何将输出分配给 shell 脚本变量?

    如何将此结果分配给 shell 变量 Input echo 1 1 bc l Output 2 Attempts 没用 bin sh a echo 1 1 bc l echo a 您正在寻找称为命令替换的 shell 功能 cmd 替换有
  • jarsigner“只能指定一个别名”

    C Program Files Java jdk1 7 0 01 bin gt jarsigner verbose sigalg MD5withRSA digestalg SHA1 keystore Cartoons keystore Ca
  • Git如何进行分布式源代码管理?

    我是一位具有 UNIX SCCS 和 Microsoft Visual SourceSafe 经验的 Git 新手 我刚刚学习 Git 它似乎有一个巨大而痛苦的学习曲线 我已经看到 Git 删除了所有我未提交的数据文件 这让我很担心 实用程
  • 获取多个日期时间对的日期范围

    给定一个形状的日期时间数组 n 2 x np array 2017 10 02T00 00 00 000000000 2017 10 12T00 00 00 000000000 dtype datetime64 ns x有形状 1 2 但实
  • 如何在批处理文件中获取当前CPU使用率和可用内存?

    我正在创建一个简单的脚本 输出当前登录的用户 当前系统的 CPU 使用率和可用内存 我已经设法让当前用户登录 但是否也可以获得 cpu 使用率和内存 这是我到目前为止的代码 echo off for f tokens 3 delims i
  • JSON 和 SOAP WCF 服务?

    我最近将 WCF SOAP 服务转换为 REST JSON 服务 正如回复中详细说明的here https stackoverflow com questions 10232509 can i generate a service refe