天道酬勤,学无止境

wshttpbinding is only for .net clients?

Is the wsHttpBinding only for .NET clients?

Because in wsHttpBinding default security is enabled, so data transferred with encryption. So how can non-.NET clients (like java or php) consume such WCF services?

评论

The default Message security for WsHttpBinding is set to "Windows", I believe. This may well be because this will make security work out of the box, at least for a WCF service and client.

If you need to be interoperable, it's easy to change this though. You can set it to any one of these:

  • Windows (the default)
  • None
  • UserName
  • Certificate
  • IssuedToken

See the "message, of wsHttpBinding" MSDN page for more details. To test communication with your Java or PHP client you could temporarily disable security:

<wsHttpBinding>
  <binding>
    <security mode="Message">
      <!-- Not recommended! Use only for testing. -->
      <message clientCredentialType="None" />
    </security>
  </binding>
</wsHttpBinding>

After you got things working you could switch to -for example- using certificates, depending on what your non-WCF side supports.

As Jeroen says by default wsHttpBinding defaults to message security and windows credentials

For non-Windows clients you will need to change the authentication mode. However, if you stay with message security you also need any consuming toolkit to have an implementation of WS-Security (and WS-Trust / WS-SecureConversation).

What features of wsHttpBinding are you using that means basicHttpBinding isn't appropriate? BasicHttpBinding is a simpler binding to get working in interop scenarios

受限制的 HTML

  • 允许的HTML标签:<a href hreflang> <em> <strong> <cite> <blockquote cite> <code> <ul type> <ol start type> <li> <dl> <dt> <dd> <h2 id> <h3 id> <h4 id> <h5 id> <h6 id>
  • 自动断行和分段。
  • 网页和电子邮件地址自动转换为链接。

相关推荐
  • 如何在WCF中使用SSL wsHttpBinding启用会话(How to enable Session with SSL wsHttpBinding in WCF)
    问题 我有一个启用了wsHttpBindings和SSL的WCF服务,但是我想启用WCF会话。 将SessionMode更改为必填后 SessionMode:=SessionMode.Required 我收到以下所述的错误。 Contract需要Session,但是Binding'WSHttpBinding'不支持它,或者没有正确配置为支持它。 这是我的示例应用程序。 App.config <?xml version="1.0" encoding="utf-8" ?> <configuration> <system.web> <compilation debug="true" /> </system.web> <!-- When deploying the service library project, the content of the config file must be added to the host's app.config file. System.Configuration does not support config files for libraries. --> <system.serviceModel> <serviceHostingEnvironment aspNetCompatibilityEnabled="true" /> <client />
  • 如何在 2.0 内置的应用程序中使用 WCF wsHttpBinding 服务?(How to consume WCF wsHttpBinding Service in application built in 2.0?)
    问题 WCF 服务正在使用“wsHttpBinding”绑定运行。 使用 WCF 服务的应用程序不符合 wcf 标准,或者换句话说,它位于 Framework 2.0 的顶部,我不能在这个应用程序中使用 ServiceModel(因为只有 3.5 支持 ServiceModel)。 任何建议,如何在 2.0 内置的应用程序中使用上述 WCF 服务? 回答1 这不起作用 - 通常。 .NET 2.0 仅支持basicHttpBinding,或新的 REST-style webHttpBinding 。 您可能会对 WSE(Web 服务增强)进行改造 - 但这会变得非常混乱。 回答2 ServiceModel 是 3.0 的一部分,而不是 3.5 - 但无论哪种方式,我都希望您应该能够使用 WSE3 进行连接,因为这提供了 WS*。 Jimmy Ziemowit 对此有一些想法。 过去,我成功地将 System.ServiceModel.dll 等与应用程序一起部署到 2.0 机器上(回到 3.0 的早期); 它也可能对你有用吗? 当然,完整的 3.0 安装是首选。 回答3 wsHttpBinding与 .NET 2.0 中使用的 ASMX 样式的 Web 引用不兼容。 如果您不需要消息级安全性,您可以切换到basicHttpBinding ,这将使任何客户端都可以使用该服务
  • 请求通道在等待回复时超时(The request channel timed out while waiting for a reply)
    问题 我有一个使用WCF与Web服务器通信的小型应用程序。 该程序由大约200个客户端使用,每个客户端以大约5-20个请求/分钟的速度发送。 查看错误日志,我经常得到: 请求通道在00:00:59.9989999之后等待回复时超时 请求如下: ClientService Client = new ClientService(); Client.Open(); Client.updateOnline(userID); Client.Close(); 这是app.config <configuration> <configSections> </configSections> <startup><supportedRuntime version="v2.0.50727"/></startup><system.serviceModel> <bindings> <wsHttpBinding> <binding name="WSHttpBinding_IClientService" closeTimeout="00:01:00" openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00" bypassProxyOnLocal="false" transactionFlow="false"
  • WCFTestClient使用客户端身份验证方案“匿名”对HTTP请求进行了未授权的操作(WCFTestClient The HTTP request is unauthorized with client authentication scheme 'Anonymous')
    问题 我已经创建了一个WCF服务并将其部署在服务器上。 当我浏览此服务时,它会以?wsdl URL给我肯定的答复。 现在,我正在尝试通过WCF测试客户端测试服务。 它显示正确的元数据。 但是,当我尝试从服务中调用任何方法时,它向我显示了一个异常……这是带有堆栈跟踪的错误详细信息。 客户端身份验证方案“匿名”未授权HTTP请求。 从服务器收到的身份验证标头是“ Negotiate,NTLM”。 服务器堆栈跟踪: 在 System.ServiceModel.Channels.HttpChannelUtilities.ValidateAuthentication(HttpWebRequest请求,HttpWebResponse响应,WebException responseException,HttpChannelFactory工厂) 客户端身份验证方案“匿名”未授权HTTP请求。 从服务器收到的身份验证标头是“ Negotiate,NTLM”。 服务器堆栈跟踪: 在 System.ServiceModel.Channels.HttpChannelUtilities.ValidateAuthentication(HttpWebRequest请求,HttpWebResponse响应,WebException responseException,HttpChannelFactory工厂)
  • MSBuild XmlMassUpdate任务(MSBuild XmlMassUpdate Task)
    问题 我想问一个有关MSBuild任务XmlMassUpdate行为的快速问题。 有没有人发现该任务只会将唯一的节点复制到内容XML中? 例如,如果我有一个客户端节点,该客户端节点具有多个称为终结点的子节点,则它将仅批量复制第一个终结点节点,而消除所有其他节点。 我在下面提供了一些我要描述的示例,在此先感谢。 MSBuild任务: <Project DefaultTargets="Run" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> <Import Project="$(MSBuildExtensionsPath)\MSBuildCommunityTasks\MSBuild.Community.Tasks.targets" /> <Target Name="Run"> <Delete Condition="Exists('web.config')" Files="web.config"/> <XmlMassUpdate ContentFile="app.config" ContentRoot="configuration/system.servicemodel" SubstitutionsFile="wcf.config" SubstitutionsRoot="/system.servicemodel"
  • WCF客户端配置-基址?(WCF Client configuration - base address?)
    问题 我将WCF客户端连接到一组服务,这些服务都实现相同的合同,并且都在同一主机上。 我希望有一种方法可以组合端点定义以减少配置混乱。 我也不想仅通过配置就以编程方式做到这一点。 现在,我的配置已经重复了很多次: <endpoint address="http://hostname/ServiceA.svc" binding="wsHttpBinding" bindingConfiguration="WSHttpBinding_MyBinding" contract="ServiceReference.ISearchService" name="ServiceA"> </endpoint> <endpoint address="http://hostname/ServiceB.svc" binding="wsHttpBinding" bindingConfiguration="WSHttpBinding_MyBinding" contract="ServiceReference.ISearchService" name="ServiceB"> </endpoint> // continued for ServiceC, ServiceD, etc 对于服务器配置,有一些可用于此目的的“ baseAddressPrefixFilters”概念-客户端配置是否有用? 回答1
  • 如何使WCF服务服务器-客户端时差独立?(How to make WCF service server-client time difference independent?)
    问题 从测试客户端访问WCF服务时,出现以下异常: System.ServiceModel.Security.MessageSecurityException: An unsecured or incorrectly secured fault was received from the other party. See the inner FaultException for the fault code and detail. ---> System.ServiceModel.FaultException: An error occurred when verifying security for the message. --- End of inner exception stack trace --- 我在互联网上搜索了此问题的根本原因。 我发现这主要是由于客户端-服务器时间差异引起的。 但是我找不到正确的解决方案。 以下是我的服务器端配置: <system.serviceModel> <bindings> <wsHttpBinding> <binding name="RequestUserName"> <security mode="Message"> <message clientCredentialType="Windows"
  • MSBuild XmlMassUpdate Task
    I wanted to ask a quick question regarding the behaviour of the MSBuild task XmlMassUpdate. Has anyone found that the task will only copy unique nodes over to the content XML? For example, if I have a client node which has multiple children called endpoint, then it will only mass copy the first endpoint node while eliminating all the others. I've provided some examples below of what I'm describing, many thanks in advance. MSBuild Task: <Project DefaultTargets="Run" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> <Import Project="$(MSBuildExtensionsPath)\MSBuildCommunityTasks
  • Is it possible to call Dynamics CRM 2011 late-bound WCF Organization service without the SDK - straight customized binding?
    I'm trying to implement a pure WCF scenario where I want to call Dynamics CRM WCF service without relying on the SDK helper classes. Basically, I would like to implement federated authentication against Dynamics CRM 2011 using only native WCF support from the .net framework. The reason I'm doing this is that I would like to port this scenario later-on to BizTalk. I've successfully generated proxy classes with SvcUtil, but the part of the policies and security assertions are not compatible with the configuration schema. SvcUtil suggests to build the binding from code instead, which is what I'm
  • WCF Service with WS-Security requires Signed Timestamp only
    I need to provide a service to a third-party that will be sending soap messages with a signed Timestamp. How can I configure my service to support this? UPDATE I've managed to get close to the format of the Soap message that we're after but WCF insists on signing both the username and the timestamp tokens, Is there a way to modify the binding to only sign the timestamp? Further Update Here are our requirements: The Timestamp element MUST be signed. The CN name on the certificate used for signing MUST match the Username give in the UsernameToken element. The certificate used for signing MUST be
  • 没有配置文件的WCF配置(WCF Configuration without a config file)
    问题 有谁知道一个很好的例子,说明如何在不使用配置文件的情况下以编程方式公开WCF服务? 我知道现在有了WCF,服务对象模型变得更加丰富,所以我知道这是可能的。 我只是没有看到如何做的例子。 相反,我想看看在没有配置文件的情况下如何进行消费。 在有人问之前,我非常需要在没有配置文件的情况下执行此操作。 我通常不建议这样做,但正如我所说,在这种情况下有非常特殊的需要。 回答1 正如我所发现的,在不使用配置文件的情况下使用Web服务非常简单。 您只需要创建一个绑定对象和地址对象,然后将它们传递给客户端代理的构造函数或通用ChannelFactory实例即可。 您可以查看默认的app.config来查看要使用的设置,然后在实例化代理的位置创建一个静态帮助器方法: internal static MyServiceSoapClient CreateWebServiceInstance() { BasicHttpBinding binding = new BasicHttpBinding(); // I think most (or all) of these are defaults--I just copied them from app.config: binding.SendTimeout = TimeSpan.FromMinutes( 1 ); binding
  • WCF命名管道的最小示例(WCF named pipe minimal example)
    问题 我正在寻找WCF命名管道的最小示例(我希望可以通过命名管道进行通信的两个最小应用程序:服务器和客户端。) 微软有一篇引人入胜的文章“入门指南” ,它通过HTTP描述了WCF,而我正在寻找有关WCF和命名管道的类似信息。 我已经在Internet上找到了几篇文章,但是它们有些“高级”。 我需要一些最少的东西,只有强制性的功能,因此我可以添加代码并使应用程序正常运行。 我该如何替换它以使用命名管道? <endpoint address="http://localhost:8000/ServiceModelSamples/Service/CalculatorService" binding="wsHttpBinding" bindingConfiguration="WSHttpBinding_ICalculator" contract="ICalculator" name="WSHttpBinding_ICalculator"> <identity> <userPrincipalName value="OlegPc\Oleg" /> </identity> </endpoint> 我该如何替换它以使用命名管道? // Step 1 of the address configuration procedure: Create a URI to serve as the base
  • C# WCF: Having a single app.config in a shared library that provides access to the Service
    I currently have a solution with a couple of projects and one of them is a WCF Service. I created another projected with a static class that basically provides a gateway to an instance of the WCF client, like such : public static class WSGateway { public static DBInteractionGatewayClient MR_WebService { get { return new DBInteractionGatewayClient(); } } } This is so that (or so I thought) I could use a single app.config file that will be in that library only and then other projects can just just reference it and get a reference to that client from that property. But the problem is that when a
  • 如何设置带有凭据的代理到生成的WCF客户端?(How to set proxy with credentials to generated WCF client?)
    问题 如果客户使用带凭据的代理,则我无法连接到WCF服务。 我无法找到将凭据设置为生成的客户端代理的方法。 如果使用Web服务,则可以设置代理。 回答1 我不能完全确定这是否是您要寻找的东西,但是到这里就可以了。 MyClient client = new MyClient(); client.ClientCredentials.UserName.UserName = "u"; client.ClientCredentials.UserName.Password = "p"; 回答2 我通过将Active Directory用户而不是网络服务添加到“应用程序池”>“身份”来解决此问题。 该用户也属于有权通过代理服务器浏览Internet的组中。 还要将此用户添加到客户端主机服务器上的IIS_WPG组。 在第一位下面的代码中,使用WCF服务对客户端进行身份验证。 第二位假定将凭据传递给内部代理服务器,以便客户端在DMZ服务器上调用WCF服务。 但是我不认为代理部分有效。 我还是要离开代码。 // username token credentials var clientCredentials = new ClientCredentials(); clientCredentials.UserName.UserName = ConfigurationManager.AppSettings
  • IIS7上托管的WCF进行GZip压缩(GZip compression with WCF hosted on IIS7)
    问题 就我而言,每个人都在EDIT 2中提出了这个问题。尽管它只是该问题的IIS方面的部分解决方案,但这正是我所寻找的。 因此,我要将查询添加到有关该主题的一小部分问题中。 我正在尝试对来自WCF服务的大型肥皂响应启用GZip压缩。 到目前为止,我已经在这里和其他许多地方遵循了说明,以在IIS上启用动态压缩。 这是来自applicationHost.config的我的dynamicTypes部分: <dynamicTypes> <add mimeType="text/*" enabled="true" /> <add mimeType="message/*" enabled="true" /> <add mimeType="application/x-javascript" enabled="true" /> <add mimeType="application/atom+xml" enabled="true" /> <add mimeType="application/xaml+xml" enabled="true" /> <add mimeType="application/xop+xml" enabled="true" /> <add mimeType="application/soap+xml" enabled="true" /> <add mimeType="*/*"
  • WF工作流与Web服务的相互调用 —— WF与WCF互相调用(利用ReceiveActivity把WF发布为WCF)
    WF工作流与Web服务的相互调用 —— WF与WCF互相调用(利用ReceiveActivity把WF发布为WCF) 文章里面开始为大家介绍一下WCF与 Workflow工作流之间的关系。微软在WCF和WF之间扩展了强大的功能,使用两者能够协调工作,在.NET Framework3.5中既可以把Workflow发布为WCF实现工作流服务,也可以在WCF中调用Workflow工作流,增强其使用的灵活性。下面将为大家如何通过ReceiveActivity把WF发布为WCF。前几篇文章已经为大家介绍过Web服务与Workflow工作流之间的相互调用的方法,在这两篇文章里面开始为大家介绍一下WCF与 Workflow工作流之间的关系。微软在WCF和WF之间扩展了强大的功能,使用两者能够协调工作,在.NET Framework3.5中既可以把Workflow发布为WCF实现工作流服务,也可以在WCF中调用Workflow工作流,增强其使用的灵活性。下面先为大家介绍如何把Workflow工作流发布为WCF服务,这里还是以最简单的Hello World为例子。首先设定一个服务契约接口View Codenamespace Microsoft.IService{ [ServiceContract(SessionMode=SessionMode.NotAllowed)] /
  • WCF MaxReceivedMessageSize:超出最大邮件大小配额(WCF MaxReceivedMessageSize: maximum message size quota exceeded)
    问题 我收到此错误: 已超过传入消息的最大消息大小配额(65536)。 要增加配额,请在适当的绑定元素上使用MaxReceivedMessageSize属性。 如何在WCF客户端应用程序或服务器应用程序中增加此值,并在可能的情况下举例说明如何完成此操作? 回答1 您可以在客户端的app / web.config中增加它: <system.serviceModel> <bindings> <basicHttpBinding> <binding name="WSBigQuotaConfig" closeTimeout="00:01:00" openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00" allowCookies="false" bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard" maxBufferSize="2097152" maxBufferPoolSize="524288" maxReceivedMessageSize="2097152" messageEncoding="Text" textEncoding="utf-8" transferMode="Buffered"
  • 使用WCF在App.config中使用Windows角色身份验证(Using Windows Role authentication in the App.config with WCF)
    问题 我正在使用WCF服务和net.tcp终结点,并将serviceAuthentication的主体PermissionMode设置为UseWindowsGroups。 当前,在服务的实现中,我正在使用PrincipalPermission属性设置每种方法的角色要求。 [PrincipalPermission(SecurityAction.Demand, Role = "Administrators")] [OperationBehavior(Impersonation = ImpersonationOption.Required)] public string method1() 我正在尝试做几乎相同的事情,除了在app.config中设置了角色的配置。 有什么办法做到这一点,并且仍在使用Windows组身份验证? 谢谢 回答1 如果我理解得很好,您想在运行时选择角色。 这可以通过 WCF 操作中的权限需求来完成。 例如 public string method1() { PrincipalPermission p = new PrincipalPermission(null, "Administrators"); p.Demand(); ... 回答2 如果您在 IIS 中托管 WCF 服务,它将在 ASP.NET 工作进程中运行,这意味着您可以像使用 ASMX Web
  • 通过Javascript调用时,WCF Web服务返回“错误请求”错误(WCF Web Service returns “Bad Request” error when invoked through Javascript)
    问题 我正在尝试通过javascript向WCF Web服务方法提出ajax GET请求。 每次返回的请求都会显示400“ Bad Request”错误。 但是,如果我通过WCF测试客户端调用相同的Web服务方法,它将返回正确的结果。 另外,通过javascript进行的ajax调用会同时在GET和POST请求上返回错误的请求错误。 我已将[WebGet]属性添加到我的Web服务方法中,但错误仍然存​​在。 这是我的javascript方法和ajax调用: function Getdata() { var methodUrl = serverUrl + "/GetData"; $.ajax({ async: false, type: "GET", contentType: "application/json; charset=utf-8", dataType: "json", url: methodUrl, beforeSend: function (XMLHttpRequest) { //ensures the results will be returned as JSON. XMLHttpRequest.setRequestHeader("Accept", "application/json"); }, success: function (data) { }, error
  • Large WCF web service request failing with (400) HTTP Bad Request
    I've encountered this apparently common problem and have been unable to resolve it. If I call my WCF web service with a relatively small number of items in an array parameter (I've tested up to 50), everything is fine. However if I call the web service with 500 items, I get the Bad Request error. Interestingly, I've run Wireshark on the server and it appears that the request isn't even hitting the server - the 400 error is being generated on the client side. The exception is: System.ServiceModel.ProtocolException: The remote server returned an unexpected response: (400) Bad Request. --->