Tag: #wcf

带有基于rest的服务的WSDL有什么意义?

如果基于REST的Web服务就像GETing和POST到url一样简单并解析响应,那么我们需要一个wsdl吗? 重点是什么。 我理解当使用基于SOAP的服务时,它用于构造SOAP请求和响应,但是当我创建基于REST的服务时,不明白为什么visual studio为我提供了wsdl …

进程间通信选项

我需要在一个应用程序内订阅其他应用程序公开的事件。 我注意到许多人认为使用WCF命名管道是最佳实践。 我是对的,如果我选择WCF命名管道,我将不得不使用IIS? 顺便说一句,我一般有哪些选择?

获取有关在WCF中花费很长时间的方法的进度信息的有效模式?

我想获得有关在WCF上调用的方法的进度更新。 例如,我运行1000个查询,并想知道当前状态。

WCF服务无法通过MailDefinition发送邮件

// stuff…… return SendCreationMail(Membership.GetUser((Guid)request.UserEntityId), request, new Control()); } private const string TemplateRoot = “~/app_shared/templates/mail/”; private const string ServerRoot = TemplateRoot + “server/”; public static bool SendCreationMail(MembershipUser user, IServerAccountRequest request, Control owner) { var definition = new MailDefinition { BodyFileName = string.Concat(ServerRoot, “creation.htm”), IsBodyHtml = true }; var subject = “New {0} account created!”.FormatWith(request.ServerApplicationContract.Id); var data […]

‘System.ComponentModel.PropertyChangedEventHandler’无法从特殊类’System.MulticastDelegate’派生

我正在开发这里推荐的wcf服务。 它在开发原始.NET 2.0 Web服务时解决了我最初的命名空间冲突问题,但我遇到了另一个问题。 我试图传递给wcf服务的对象在客户端中用于聚合来自用户的一堆信息,并且它的一些字段被数据绑定到ui控件(因此实现了PropertyChangedEventHandler)。 当我尝试在我的客户端项目中编译由svcutil生成的代理时,我得到了标题这个问题的错误。 将所有数据从这个对象中拉出并放入一个类中进行发送(然后重建原始类型)似乎是多余的 – 更不用说花费很长时间了。 有解决方法吗?

如何为web方法传递可选参数?

我有一个带有多个参数的web方法。 Web方法仅依赖于2个字段,其余字段都是可选的。 [OperationContract] public string WarehouseContactInformation(int WAID (Required), string CN (Required), string CT (Optional), string CC (Optional), string CFN (Optional), string CD (Optional), string CE (Optional),string CW (Optional)) 如何将这些参数声明为可选参数,以便在调用Web方法时,我只需要通过我有值的字段,例如: WarehouseContactInformation(1,’Bill’,’00012311′) WarehouseContactInformation(1,’Bill’,’00012311′,’12415415′,’123525′)

entity framework – 基础提供程序在ConnectionString上失败

在使用entity framework时,我已将其拆分为自己的项目: RivWorks.Model – 包含实体模型 RivWorks.Controller – 使用实体模型并包含商业规则 RivWorks.View.Web – 该网站 RivWorks.View.Services – WCF项目 网站上的所有内容都运行良好。 我可以调用Controller并获得有效的模型。 当我从Web.Service尝试相同的事情时,我收到此错误: 错误: ConnectionString上的底层提供程序失败。 堆栈跟踪: at System.Data.EntityClient.EntityConnection.ChangeConnectionString(String newConnectionString) 在System.Data.EntityClient.EntityConnection..ctor(String connectionString) at System.Data.Objects.ObjectContext.CreateEntityConnection(String connectionString) at System.Data.Objects.ObjectContext..ctor(String connectionString,String defaultContainerName) 在RivWorks.Model.Entities.RivFeedsEntities1..ctor(String connectionString) 在RivWorks.Model.FeedStoreReadOnly..ctor(String connectionString) 在RivWorks.Controller.ProductManager.LookupProduct(String productID,String sku,String urlRef,String env,String logPath) 我有点困惑为什么和挖掘错误日志我终于弄清楚连接字符串没有被从网站的配置文件中读取。 所以,我添加了一些代码来捕获它,并且,现在,硬编码值。喜欢: public dataObjects.NegotiateSetup LookupProduct(string productID, string sku, string urlRef, string env, string […]

在exception期间捕获原始HTTP POST数据

我有一个托管在IIS / ASP.NET中的WCF服务,它接受序列化对象的HTTP Post( 不是表单post )。 如果客户端发送格式错误的请求(例如,他们没有正确序列化对象),我想记录发送的消息。 我们已经在使用ELMAH捕获未处理的exception,因此只需附加发布数据就是最简单的选择。 我可以在exception期间获取当前的HttpContext,但是这只包含HTTP标头信息。 我的问题是:有没有办法捕获原始HTTP POST请求正文? 或者,失败 – 捕获导致错误的输入的更好方法(没有反向代理)? 编辑:只是为了澄清,始终运行数据包级捕获并不合适。 我正在寻找一个可以部署到生产服务器的解决方案,它将拥有我们无法控制的客户端或监控能力。 编辑#2:建议访问Request.InputStream – 如果您在WCF已从流中读取请求后尝试读取,则此操作无效。 一个示例代码,以了解我是如何尝试使用它的。 StringBuilder log = new StringBuilder(); var request = HttpContext.Current.Request; if (request.InputStream != null) { log.AppendLine(string.Format(“request.InputStream.Position = \”{0}\””, request.InputStream.Position)); if (request.InputStream.Position != 0) { request.InputStream.Seek(0, System.IO.SeekOrigin.Begin); } using (StreamReader sr = new StreamReader(request.InputStream)) { log.AppendLine(string.Format(“Original Input: […]

c#TimeZoneInfo序列化

我在序列化TimeZoneInfo对象时遇到了一些问题。 我试图在WCF服务的数据合同中使用TimeZoneInfo变量,但序列化失败。 所以我写了这段代码来测试序列化。 这是我的所作所为: var fileName = “tmp.xml”; var tz = TimeZoneInfo.Local; var dataSer = new DataContractSerializer(typeof(TimeZoneInfo)); try { using (var xml = new FileStream(fileName, FileMode.Create)) { dataSer.WriteObject(xml, tz); } } catch (Exception e) { Console.WriteLine(e.Message); } 现在,当我调用WriteObject方法时,它会抛出exception: 键入’System.TimeZoneInfo + AdjustmentRule []’,数据协定名称为“ArrayOfTimeZoneInfo.AdjustmentRule:http://schemas.datacontract.org/2004/07/System”,不是预期的。 考虑使用DataContractResolver或将任何静态未知的类型添加到已知类型列表中 – 例如,通过使用KnownTypeAttribute属性或将它们添加到传递给DataContractSerializer的已知类型列表中。 如果我尝试将[KnownType(typeof(System.TimeZoneInfo.AdjustmentRule []))]添加到类中,我会得到相同的错误。 如果我将此行添加到我的数据协定界面,我会收到编译错误: 错误1’System.TimeZoneInfo.AdjustmentRule’由于其保护级别而无法访问 根据文档,TimeZoneInfo类实现了ISerializable,因此它应该默认序列化。 谁能告诉我这里我做错了什么? 我将不胜感激任何帮助。 谢谢。

如何在WCF中更改SOAP Envelope架构?

我通过WCF连接到第三方端点,我有一个问题。 WCF生成的SOAP信封的模式与端点不兼容。 目前WCF正在生成: 但它必须是这样的: 我在soapUI中测试了这个以确认这是问题,但是如何在WCF中控制它? 我使用Visual Studio中的“添加服务引用”选项来生成服务。 有任何想法吗? 提前致谢。 安迪