WCF服务显示异常时的WSHttpBinding和用户名,身份验证安全服务

我在.NET 4.0中创建一个workflowservice

我想,以确保本(WCF)服务,并使用下面的链接查看如何做到这一点。

我跟着指示,然而,当一个定义servicebehavior全部的寄托工作正常。 配置是这样的:

<behaviors> <serviceBehaviors> <behavior> <serviceCredentials name="ServiceBehavior"> <userNameAuthentication userNamePasswordValidationMode="MembershipProvider" membershipProviderName="AspNetSqlMembershipProvider" /> </serviceCredentials> <serviceMetadata httpGetEnabled="true" /> <serviceDebug includeExceptionDetailInFaults="false" /> </behavior> </serviceBehaviors> </behaviors>

我的绑定指定这样的:

<bindings> <wsHttpBinding> <binding name="CentralAdminBinding"> <security mode="TransportWithMessageCredential"> <transport clientCredentialType="None"/> <message clientCredentialType="UserName"/> </security> </binding> </wsHttpBinding> </bindings>

当我打电话的网址看到xamlx的服务,以下错误显示:

找不到与绑定basicHttpBinding的端点符合计划的https的基址。 已注册的基址方案是[HTTP]

如何处理这个问题? 我根本不使用https,但仍得到一个错误。

我也试图改变basicHttpBinding的,而不是wshttp,但它给出了一个类似的错误。

当改变SECURITYMODE以邮件我收到以下错误: 没有提供的服务证书。 指定ServiceCredentials服务证书

有没有办法使用的配置没有证书?

--------------解决方案-------------

TransportWithMessageCredential意味着要使用传输安全和消息发送证书。 在这种情况下,传输安全装置的HTTPS。 WCF的第一realease要求用户名和密码,可以仅与安全通信中使用。 后来MS发布了补丁程序,它允许的解决方法,以避免HTTPS,但仍然不建议。 在.NET 4.0补丁直接包含。

如果你想使用消息凭据没有安全的通信,你必须创建自定义绑定与此类似:

<bindings>
<customBinding>
<binding name="HttpWithAuthentication">
<security authenticationMode="UserNameOverTransport" allowInsecureTranpsort="true" />
<context /> <!-- needed for durable worklfows -->
<textMessageEncoding messageVersion="Soap12Addressing10" />
<httpTransport />
</binding>
</customBinding>
</bindings>

与allowInsecurTransport问题是,实在是有些“速战速决”,这不符合所有的WCF功能集成。 因此,例如,当你使用你的服务不能生成WSDL /元数据,因为这部分仍然需要安全的通信。

您已经使用TransportWithMessageCredential这意味着强制HTTPS。 所以,你必须要么改变你的安全设置和启用SSL。

WCF不允许通过HTTP明文验证,这需要​​HTTPS和这种行为是由设计 - 我真的不同意,但同时我不是微软。

如果您需要启用明文认证,则需要手工工艺的邮件中的邮件检查。

UPDATE

这里是我的实现(这是概念的粗糙,仅证明),但对方的回答是更好的(内置支持WCF 4.0):

[Serializable()]
public class ConsoleMessageTracer : BehaviorExtensionElement,
IClientMessageInspector ,IEndpointBehavior, System.Configuration.IConfigurationSectionHandler
{

private string _userName = string.Empty;
private string _password = string.Empty;

[XmlAttribute()]
public string UserName
{
get { return _userName; }
set { _userName = value; }
}

[XmlAttribute()]
public string Password
{
get { return _password; }
set { _password = value; }
}

private Message TraceMessage(MessageBuffer buffer)
{
Message msg = buffer.CreateMessage();
Console.WriteLine("\n{0}\n", msg);
return buffer.CreateMessage();
}

public void AfterReceiveReply(ref Message reply, object
correlationState)
{
reply = TraceMessage(reply.CreateBufferedCopy(int.MaxValue));
}

public object BeforeSendRequest(ref Message request,
IClientChannel channel)
{

request.Headers.Add(MessageHeader.CreateHeader("Security",
"http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd",
tt, true, "http://www.isban.es/soap/actor/wssecurityUserPass")
);

return null;
}

public override Type BehaviorType
{
get { return this.GetType(); }
}

protected override object CreateBehavior()
{
return this;
}

#region IEndpointBehavior Members

public void AddBindingParameters(ServiceEndpoint endpoint, BindingParameterCollection bindingParameters)
{
return;
}

public void ApplyClientBehavior(ServiceEndpoint endpoint, ClientRuntime clientRuntime)
{
clientRuntime.MessageInspectors.Add(new ConsoleMessageTracer());
//foreach (ClientOperation op in clientRuntime.Operations)
// op.ParameterInspectors.Add(new ConsoleMessageTracer());
}

public void ApplyDispatchBehavior(ServiceEndpoint endpoint, EndpointDispatcher endpointDispatcher)
{
//endpointDispatcher.DispatchRuntime.MessageInspectors.Add(new ConsoleMessageTracer());
//foreach (DispatchOperation op in endpointDispatcher.DispatchRuntime.Operations)
// op.ParameterInspectors.Add(new ConsoleMessageTracer());
}

public void Validate(ServiceEndpoint endpoint)
{
return;
}

#endregion

#region IConfigurationSectionHandler Members

public object Create(object parent, object configContext, XmlNode section)
{
return null;
}

#endregion
}

[DataContract(Namespace = "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd")]
//[DataContract(Namespace = "")]
[Serializable()]
public class UserNameTokenToken
{
[DataMember()]
public UserNameToken UsernameToken;

public UserNameTokenToken(UserNameToken token)
{
UsernameToken = token;
}
}

[DataContract(Namespace = "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd")]
//[DataContract(Namespace = "")]
[Serializable()]
public class UserNameToken
{
[DataMember(Order = 1)]
public string Username = string.Empty;
[DataMember(Order = 2)]
public string Password = string.Empty;

public UserNameToken(string uname, string pass)
{
Username = uname;
Password = pass;
}

}

分类:C# 时间:2012-01-01 人气:2
分享到:

相关文章

  • 建立创建并在多个4.0不同的工作流程进行通信的WCF服务 2013-01-06

    我是新来的工作流4.0和WCF和我在努力创建一个用于创建,运行和不同类型的工作流程进行通信的WCF服务. 使用工作流3.5我能创造一个很好的web服务的创建和破坏不同类型的工作流程,并允许一个单一的接口去跟不同类型的工作流程. 例如,要在3.5创建的一个给定代码的工作流:(其中一个代码对应于工作流类型) [WebMethod] public string CreateWorkflow(int code) { WorkflowRuntime runtime = createRuntime(); t

  • 实例化工作流程的基础活动:VS:OK,打造:NOK 2012-03-18

    我开始与工作流程的基础工作,我在做一些测试,以了解它是如何工作的. 我发现这里:http://msdn.microsoft.com/en-us/library/ee620806.aspx其显示的方式来实例化我的工作流的方式,我觉得很大的一个例子,与 WorkflowApplication app = new WorkflowApplication(new Sequence1()); 于是,我就这适用于我的例子,但我想不通为什么它不适合我的代码工作. 我已经创建活动非常简单(只包含的WriteLi

  • 良好的工作流程的基础样本 2014-04-19

    能否请您推荐一下wofrlow基础好文章? 这将是它是否会关于这项技术的一些开源项目经验非常好. 我未来的项目将与WF和ASP.NET MVC3,所以我希望得到一些经验之前,我开始这个项目. 谢谢! 编辑 这将是非常有益的获得肯定有关WF4和流程图的工作流程的更多信息. 谢谢! --------------解决方案------------- 试试这些博客帖子我做这些或MSDN资源,包括我做的MSDN网站上的视频. 我建议那些PluralSight: http://www.pluralsight-

  • 拆分Excel工作表到多个工作表的基础上用VBA列 2012-08-17

    大家好, 我有一个Excel工作簿包含在数据表(以下简称"中文手册")约110列,我创建了另外两个表与数据透视表("AnalysisSheet1"&"AnalysisSheet2")分析. 我在数据表一个标准列此工作簿分成多个工作簿. 该方法是如下所示(只有一个超过110列4列提取物): REF 公司 月 销售 ABC 微软 2014年3月 10 DEF ORACLE 2014年3月 220 GHI ORACLE 2014年3月 12 M

  • 如何登录工作流程的基础活动 2015-01-01

    我有个任务日志记录功能添加到现有的工作流程基础的解决方案. 有一个分层架构:BusinessLayer-> AgentLayer-> StoreLayer. 在业务层有一个XAML活动它由从一个或多个代理的活动. 代理活动由来自一个或多个存储活动. 代理和存储活动自CodeActivity继承. 活动由执行 WorkflowInvoker.Invoke(activity); 我的任务是记录每个活动的执行. 日志输出. 应该是如 BusinessActivity1 has been starte

  • 工作流程的基础 - 平衡方案 2015-02-26

    我那里有2上运行的工作流应用程序实例平衡的环境. 这是从SharePoint场这也与2前端平衡调用. 工作流利用持久性的和​​两个工作流程都连接到同一个持久数据库. 我们收到以下错误,我们认为这可能与平衡的环境. 这是因为我们已经测试thouroughly在非均衡的环境中的工作流程,我们从来没有收到此错误. System.ServiceModel.FaultException:操作|在服务实例"DoSumbit {} http://tempuri.org/ IMyContract"与标

  • 在IIS上承载的一个WCF工作流程使用Ninject 2013-05-17

    很新的对WCF和WF使用Ninject,我目前停留在我如何能在一个CodeActivity类示例使用属性注入 public sealed class TestInjection : CodeActivty { [Inject] public IRepository Repository { get; set; } // Define an activity input argument of type string public InArgument<string> Text { get; s

  • 在长时间运行的工作流程的基础4.0请求 - 响应 2012-09-20

    什么是解决WF 4.0以下最简单的方法: 发送数据/请求到WCF服务(例如一个请求来启动过程X) 只获得指示处理已开始响应(简单,成功/解串输入的故障). 继续处理在自定义WF活动(可能需要几分钟) 结束 我的目标是有一旦对象被接收发送回WCF客户端的响应,并处理任何处理,而不在客户等待. 目前,我的顺序工作流锁,直到自定义活动完成再继续. --------------解决方案------------- 你可以将请求发送到在WCF一个"单向"的方法来揭开序幕处理; [Operation

  • 有2个工作表的基础上总结迄今的工作条件 2013-08-29

    我有一个公式我试图做出工作表之间的工作. 我有一个列出了所有发运一个工作表和其他工作表中的发货信息和日期航运日志清单. 我把日期库存和我想的库存拉货运走日志基于它运,如果我把进库存的日期相匹配的日期拉过来运出的数量. 下面是我的榜样,我试图做的工作forumla(我想我"米做的是不工作,因为我有一个日期的工作). 表1(传送日志) A / C / D / E / F / H / I / J / K / L DC#/地址/城市,ST,邮编/ PO / SHP不前​​/ PO数量/数量每显示/显示出

  • 工作流程的基础:获取ASP.NET的终止原因 2013-08-29

    有没有什么办法让插入到一个ASP .NET应用程序内的TerminateWorkflow活动的终止原因? 例如下列犯规作品. app.Completed =(e) => { HttpContext.Current.Response.Write("Exception:" + o.Reason.GetType().FullName + o.Reason.Message); syncEvent.Set(); }; 有没有人有什么想法? --------------解决方案-------

Copyright (C) 55228885.com, All Rights Reserved.

55228885 版权所有 京ICP备15002868号

processed in 2.552 (s). 10 q(s)