Tag: wcf

WCF中的URITemplate中可选的查询string参数?

我正在WCF 4.0中开发一些RESTful服务。 我有一个方法如下: [OperationContract] [WebGet(UriTemplate = "Test?format=XML&records={records}", ResponseFormat=WebMessageFormat.Xml)] public string TestXml(string records) { return "Hello XML"; } 所以,如果我浏览浏览器到http:// localhost:8000 / Service / Test?format = XML&records = 10 ,那么所有东西都按预期工作。 但是,我希望能够导航到http:// localhost:8000 / Service / Test?format = XML,并离开URL的“&records = 10”部分。 但是现在,由于URI与预期的URI模板不匹配,我得到一个服务错误。 那么如何实现一些我的查询string参数的默认值? 我想默认的“logging”为10例如,如果该部分被closures查询string。

ELMAH – 不具有HttpContext的exceptionlogging

我试着用Elmah.XmlFileErrorLog 这个解决scheme,但我得到以下exception System.ArgumentNullException was unhandled by user code Message="Value cannot be null.\r\nParameter name: context" Source="Elmah" ParamName="context" StackTrace: at Elmah.ErrorSignal.FromContext(HttpContext context) in c:\builds\ELMAH\src\Elmah\ErrorSignal.cs:line 67 at Elmah.ErrorSignal.FromCurrentContext() in c:\builds\ELMAH\src\Elmah\ErrorSignal.cs:line 61 at ElmahHttpErrorHandler.ProvideFault(Exception error, MessageVersion version, Message& fault) in c:\Myapplication\App_Code\Util\ElmahHttpErrorHandler.cs:line 19 at System.ServiceModel.Dispatcher.ErrorBehavior.ProvideFault(Exception e, FaultConverter faultConverter, ErrorHandlerFaultInfo& faultInfo) at System.ServiceModel.Dispatcher.ErrorBehavior.ProvideMessageFaultCore(MessageRpc& rpc) at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessageCleanup(MessageRpc& rpc) InnerException: Web.Config文件 <configSections> <section […]

我错过了什么WCF?

在这个阶段,我一直在MS技术上开发的时间比我想象的要长。 当.NET到达现场时,我认为他们一针见血,每次迭代和版本都认为他们的技术越来越强大,期待每次发布。 然而,不得不和WCF去年一起工作,我必须说我发现这项技术很难合作和理解。 最初它是非常有吸引力的,但是当你开始深入其中时,configuration是一场噩梦,必须覆盖消息大小的行为,消息中包含的对象的数量,安全模型的复杂性,出现故障时处理代理回到代码定义接口而不是XML。 它只是不能开箱即用,我认为它应该。 我们发现所有上述问题,同时要么testing自己,要么当我们的产品出现在现场时。 我明白这背后的理由,但他们肯定会想出更简单的执行机制。 我想我问的是, 我在看WCF是错误的吗? 它有什么优势的替代品? 在什么情况下我应该select使用WCF? 好的伙计,对于延迟的回应抱歉,工作确实有一个讨厌的习惯,有时挡路:) 一些澄清我WCF的主要着色点我认为落在以下几个方面虽然它确实是开箱即用的,但是你的左边有一些重要的惊喜。 如上所述,基本的东西是被限制的,直到被覆盖 string的大小可以通过不能超过8K 可以在单个消息中传递的对象数量受到限制 代理不会自动从故障中恢复 configuration的数量虽然有好处,但理解这一切,以及在什么情况下使用什么以及在何种情况下难以理解。 尤其是当在现场部署具有不同安全要求的软件时。在谈论configuration时,我们不得不将大量的我们隐藏在后端数据库中,因为现场的安全和networking人员试图在没有理解的情况下改变configuration文件中的东西它。 在代码中保持接口的configuration,而不是移动到XML中明确定义的接口,这些接口几乎可以被任何东西发布和使用。 我知道我们可以从程序集中导出XML,但它充满了垃圾,某些代码生成器窒息了它。 我知道这个世界在继续,在过去的几年里(我已经开发了22年),我正在积极地使用WCF,所以不要误解我的意思,我明白它的意思,它在哪里。 我只是觉得应该有更简单的configuration/部署选项可用,更容易的设置和更好的configurationpipe理(SQLconfiguration提供者也许,而不仅仅是web.config / app.config文件)。

System.ServiceModel.Web.dll在哪里?

我正在开发一个Windows服务,公开了一个WCF服务供Silverlight应用程序使用,正如本博客文章所述: http : //mtaulty.com/CommunityServer/blogs/mike_taultys_blog/archive/2008/03/27/10291的.aspx 我面临的问题是,我需要使用System.ServiceModel.Web.dll程序集中定义的WebInvoke属性 ,但是当我尝试在项目中添加对该程序集的引用时(通过使用Visual Studio的添加引用对话框 – .NET选项卡),没有该名称的程序集。 所以,我做错了什么,这个程序集不是标准的.NET Framework的一部分,或者它是Visual Studio中的错误? 顺便说一句,我使用的VS2010testing版2和项目的目标是.NET Framework 4。

如何处理WCFexception(带有代码的统一列表)

我试图延长这个答案,以使WCF客户端重试暂时networking故障,并处理其他情况下需要重试,如​​身份validation到期。 题: 什么是需要处理的WCFexception,以及处理它们的正确方法是什么? 以下是我希望看到的一些示例技术,以代替proxy.abort()或除此之外: 重试前延迟X秒 closures并重新创build一个新()WCF客户端。 configuration旧的。 不要重试并重新抛出这个错误 重试N次,然后抛出 由于一个人不太可能知道所有的例外情况或解决方法,因此请分享您的知识。 我将在下面的代码示例中汇总答案和方法。 // USAGE SAMPLE //int newOrderId = 0; // need a value for definite assignment //Service<IOrderService>.Use(orderService=> //{ // newOrderId = orderService.PlaceOrder(request); //} /// <summary> /// A safe WCF Proxy suitable when sessionmode=false /// </summary> /// <param name="codeBlock"></param> public static void Use(UseServiceDelegateVoid<T> codeBlock) { IClientChannel proxy […]

如何确保你不会得到WCF Faulted状态exception?

我得到这个例外: 通信对象System.ServiceModel.Channels.ServiceChannel不能用于通信,因为它处于Faulted状态。 WCF服务使用默认的wsHttpBinding。 无论我在哪里使用WCF,我都以如下方式使用WCF: using (var proxy = new CAGDashboardServiceClient()) { proxy.Open(); var result = proxy.GetSiteForRegion(ddlRegions.SelectedValue); ddlSites.DataSource = result; ddlSites.DataBind(); proxy.Close(); } 消息中显示的错误行似乎是在最后一个proxy.close之后。 不知道发生了什么事。 我从Visual Studio 08内启动服务。 这里是跟踪信息: The communication object, System.ServiceModel.Channels.ServiceChannel, cannot be used for communication because it is in the Faulted state. Server stack trace: at System.ServiceModel.Channels.CommunicationObject.Close(TimeSpan timeout) Exception rethrown at [0]: at […]

WCF应用程序启动事件

首次启动WCF服务时获得通知的最佳方式是什么? 是否有类似于ASP.NET应用程序的Global.asax中的Application_Start方法?

ASP.NET MVC和Web服务

向我的ASP.NET MVC项目添加Web服务是否打破了MVC的整个概念? 该Web服务(WCF)依赖于我的MVC项目中的模型层与后端进行通信(所以它看起来像它需要成为MVC解决scheme的一部分)。 我应该添加到控制器或模型层?

stream作为WCF返回值 – 谁处置它?

假设我有以下的WCF实现: public Stream Download(string path) { FileStream stream = new FileStream(path, FileMode.Open, FileAccess.Read); return stream; } 谁负责处理退回的价值? 毕竟,networking故障可能发生,因此消费者可能无法处置它。

意外的types – 序列化exception

我有一个WCF服务。 正常的操作会看到服务器正在执行一些处理,通过callback函数将填充的XactTaskIn对象返回给客户端。 我有这个工作确定。 我的问题是,当我尝试将returnDatavariables设置为已填充的XactException并尝试通过callback将XactTaskIn发送回客户端时,出现以下exception。 exception – “不希望使用数据协定名称”XactException:http://schemas.datacontract.org/2004/07/“键入'XactException'。考虑使用DataContractResolver或将静态未知的任何types添加到已知types列表 – 例如,使用KnownTypeAttribute属性或将它们添加到传递给DataContractSerializer的已知types的列表中。 (System.Runtime.Serialization.SerializationException)exception消息=“types'XactException'与数据协定名称'XactException:http://schemas.datacontract.org/2004/07/'不是预期的考虑使用DataContractResolver或添加任何types不知道静态到已知types的列表 – 例如,通过使用KnownTypeAttribute属性或通过将它们添加到传递给DataContractSerializer的已知types的列表“,Exception Type =”System.Runtime.Serialization.SerializationException“ 这是XactTaskIn类 [DataContract] public class XactTaskIn { [DataMember] public DateTime timeOut; [DataMember] public DateTime timeIn; [DataMember] public string name; [DataMember] public string responseTo; [DataMember] public String moduleFromName; [DataMember] public String moduleFromType; [DataMember] public String methodFromName; [DataMember] public object[] originalInputs; [DataMember] public String […]