Tag: #wcf

WCF 4rest获取请求的IP?

嘿,你如何得到提出请求的人的IP地址,如下所示: [ServiceContract] [AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Required)] [ServiceBehavior(InstanceContextMode = InstanceContextMode.PerCall)] public partial class UsersService { [WebInvoke(UriTemplate = “”, Method = “PUT”)] public User AddNewUser(User newUser) { // code goes here including GETTING AN IP?? } 谢谢!

如何将Web服务中定义的类型提供给另一个Web服务(共享类型)?

我有2个WCF服务。 服务A包含MyEntity类型的定义。 服务B包含对服务A的服务引用,因此可以使用MyEntity的类型。 所以我有一个看起来像这样的方法: protected void Update (ServiceA.MyEntity entity) { //Do stuff } 现在我想在Service A中使用这个方法,所以我为Service B添加了一个服务引用并尝试: protected UpdateServiceB(MyEntity entity) { using(ServiceB.ServiceClient client = new ServiceB.ServiceClient()) { client.Update(entity); } } 虽然服务B使用服务A中定义的类型,但这并不起作用并抱怨类型不一样,我该如何解决? UPDATE 由于时间限制我避免了这个问题,而是将Guid of MyEntity从服务A传递给了服务B. 然后我在服务A中使用了一个名为’GetMyEntity(Guid entityId)’的现有方法来检索服务B中的实体: protected void Update (Guid entityId) { MyEntity entity = new MyEntity(); using (ServiceAClient client = new ServiceAClient()) { entity […]

WCF不活动超时

我创建了一个非常简单的WCF服务,托管在Windows服务上,密切关注MSDN上的示例: http : //msdn.microsoft.com/en-us/library/ff649818.aspx 如果我在第一次通话后第二次拨打我的服务> 10分钟,我将收到一个非活动超时错误。 我知道这是WCF客户端的默认设置。 但是,当我更改我的app.config时 至 我尝试拨打电话时收到此错误消息: 由于EndpointDispatcher上的ContractFilter不匹配,因此无法在接收方处理带有Action“http://schemas.xmlsoap.org/ws/2005/02/rm/CreateSequence”的消息。 这可能是由于合同不匹配(发送方与接收方之间的操作不匹配)或发送方与接收方之间的绑定/安全性不匹配。 检查发送方和接收方是否具有相同的合同和相同的绑定(包括安全要求,例如消息,传输,无)。 这就是我的WCF配置文件在Windows服务上的样子。 我的问题是,如何将不活动时间设置为inifinte,并规避我得到的错误?

System.ServiceModel.CommunicationException:基础连接已关闭

我正在从wcf Web服务中检索数据,当数据超过20万条记录时,我得到一个exception,如下所示: System.ServiceModel.CommunicationException: The underlying connection was closed: A connection that was expected to be kept alive was closed by the server. —> System.Net.WebException: The underlying connection was closed: A connection that was expected to be kept alive was closed by the server. —> System.IO.IOException: Unable to read data from the transport connection: An existing […]

如何将斜杠和其他“url敏感”字符传递给WCF REST服务?

我有一个REST WCF服务,它有一个方法可以将参数作为字符串获取。 该字符串可以包含斜杠/字符。 它使我的请求错误,因为我认为URL出错了。 请求它并获得响应时(WebRequest.GetResponse())抛出“远程服务器返回错误:(400)错误请求。” 例外。 我的要求: http:// localhost:17679 / testmethod / DmC / TCGlOLz1EbEwqAls5Q == \ nh2cQzTizSBg = 我试图使用Uri.EscapeDataString,但它没有帮助,我得到与上面相同的例外。 在此转换后,我的请求如下所示: http:// localhost:17679 / testmethod / DmC%2FTCGlOLz1EbEwqAls5Q%3D%3D%0Ah2cQzTizSBg%3D 如果我在字符串中传递没有斜杠的字符串,它可以按我的意愿工作。 如何将斜杠和其他“url敏感”字符传递给WCF REST服务? 谢谢。 更新:我解决了,你可以在我的答案中看到它。

获得WCF消息的正文

我应该在一个简单的问题上遇到一些麻烦。 我有一个服务方法,它采用ac#Message类型,我想只提取该soap消息的正文,并使用它来构造一个全新的消息。 我不能在Message类上使用GetBody()方法,因为我不知道序列化主体的类型。 有没有人知道如何从消息中提取身体? 或者构造一个具有相同主体的新消息,即没有原始消息头等?

找不到具有不变名称“MySql.Data.MySqlClient”的ADO.NET提供程序的entity framework提供程序 – WCF

我在这里关注tutoriel(法语)但是当我用WcfTestClient测试我的WCF应用程序时,我遇到了这个错误。 没有为ADO.NET提供程序找到具有不变名称“MySql.Data.MySqlClient”的entity framework提供程序。 确保提供程序已在应用程序配置文件的“entityFramework”部分中注册。 我有一个Entity Framework的Library项目和一个WcfSelfHosting的项目。 错误来自: public IEnumerable GetAllStudentsOfCourseFinance() { return SchoolDataEntities.enrollements.Where(t => t.course.title == “Finance”).Select(t => t.student); } 我在库中的App.config 我在WcfSelfHosting项目中的App.config 我在WcfSelfHosting项目中添加了Entityframework和MySQL.Data.Entity.EF6引用。

简洁轻量的API:.NET中的REST + JSON

简介:我需要知道.NET世界中是否存在REST + JSON的轻量级实现,它不使用WCF。 如果没有,我正在寻找一些有兴趣成立开源项目合资企业的人。 我不了解你,但是当它出现时我是WCF的忠实粉丝,我赞扬它的模块化和可扩展性的设计。 然而,随着我越来越频繁地使用它,基本问题开始暴露到我现在觉得它必须被废弃和重新设计的程度。 这似乎是一个很大的声明,但我相信这些是主要问题: 首先,WCF在内部使用SOAP作为消息,这意味着如果传输消息不是SOAP,我们就会为每次调用产生转换回SOAP的成本。 这是昂贵且耗时的。 转换传出消息需要“插入”消息检查器并“窃取”消息。 顾名思义,这是一个检查员(必须用于检查和记录),所以使用它来更改消息坦白说是一个黑客。 它是根据WSDL设计的,自2001年以来世界发生了很大的变化。实现REST也需要窃取消息。 WCF是根据WSDL设计的,而不是REST。 通道堆栈不必要地很重。 主堆栈是协议不可知的。 这不是一个优势,它是一个根本性的缺陷。 如您所知,稍后添加了对大量协议级别信息的访问,因为无法实现某些重要的用户方案。 例如,TCP中的客户端IP地址无法访问并在以后添加(现在可以使用perationContext.Current.IncomingMessageProperties [RemoteEndpointMessageProperty.Name]访问) 与其他平台的互操作性可能是一个问题。 现在看来很多设计正朝着JSON和REST的简单化方向发展。 我只是喜欢他们的简约,我可以看到我的洗衣机在5到10年内消耗JSON并提供REST服务! 我相信他们在.NET中的实现是一个黑客攻击,我们非常需要一个非常轻量级和简单的框架(因为它们简单且重量轻)来在IIS内部和外部托管REST + JSON服务。 我希望这样的框架存在,但如果没有,我真的很想与一些志同道合的人一起去做些什么。 所以你怎么看? 这样的框架是否存在? 如果没有,有人有兴趣吗?

Fiddler – ReadResponse失败:服务器未返回此请求的响应

这是我在几次处理RESTful Web服务后第一次遇到这种错误。 我发现很难找出错误的原因,希望你能帮助我。 我有登录服务的这个属性 [WebGet(UriTemplate = “Login?username={username}&password={password}&ip={ip}”, ResponseFormat = WebMessageFormat.Json)] 使用fiddler来使用该服务: GET http:// localhost:3445 / Authenticate / Login?username = jsm&password = a&ip = 1 提琴手回应: [Fiddler] ReadResponse() failed: The server did not return a response for this request. 我不确定它是否由Content-type: application/json引起,因为当我尝试将其更改为xml时: [WebGet(UriTemplate = “Login?username={username}&password={password}&ip={ip}”, ResponseFormat = WebMessageFormat.Xml)] 它给了我这个结果: 有点奇怪。 我做错了什么? 我必须返回json对象..谢谢!

WCF客户端error handling

我正在消耗一个笨重的WCF服务器,它偶尔会抛出各种exception,并且还会将一些错误作为string返回。 我根本无法访问服务器代码。 我想覆盖内部WCF客户端请求调用方法并处理服务器返回的所有内部exception和硬编码错误,并在发生错误时引发Fault事件,伪: class MyClient : MyServiceSoapClient { protected override OnInvoke() { object result; try { result = base.OnInvoke(); if(result == “Error”) { //raise fault event } catch { //raise fault event } } } 因此,当我调用myClient.GetHelloWorld() ,它会通过我的重写方法。 怎么能实现这一目标? 我知道我不必使用生成的客户端,但我不想再次重新实现所有合同,我想使用生成的ClientBase子类或至少使用它的通道。 我需要的是控制内部请求调用方法。 更新 我读了这个答案 ,看起来它部分是我正在寻找的,但我想知道是否有办法将IErrorHandler仅附加到消费者(客户端)代码,我想将它添加到ClientBase实例不知何故。 更新 这篇文章看起来很有希望,但它不起作用。 应用的属性似乎没有生效。 我找不到将IServiceBehavior添加到客户端的方法。 更新 我尝试通过IEndpointBehavior.ApplyClientBehavior调用附加IEndpointBehavior.ApplyClientBehavior : public void ApplyClientBehavior(ServiceEndpoint endpoint, ClientRuntime […]