Tag: basichttpbinding

如何读取app.config文件中定义的basicHttpBinding

我试图弄清楚如何阅读如何读取app.config文件中定义的basicHttpBinding部分。 我尝试这样做,就像我做了端点地址,但它不起作用。 以下是我执行端点地址的方法: private EndpointAddress EndPointAddy { get { var config = ConfigurationManager.GetSection(“system.serviceModel/Client”) as ServiceModelSectionGroup; foreach (ChannelEndpointElement endpoint in config.Client.Endpoints) { Uri address = endpoint.Address; if (address != null) { return new EndpointAddress(address); } } return null; } } 这是我用BasicHttpBinding尝试过的 private BasicHttpBinding Binding { get { var config = ConfigurationManager.GetSection(“system.serviceModel/Client”) as ServiceModelSectionGroup; foreach (ChannelEndpointElement bindings […]

如何在发出请求之前将WCF Http客户端绑定到特定的出站IPAddress

我希望我的请求通过特定的IP地址发出。 有没有办法在WCF中这样做。 我为什么需要这个的解释是有点长的啰嗦,所以我宁愿不进入那个。 这是示例代码 string ipAddress = “192.168.0.32”; IService service; ChannelFactory factory = new ChannelFactory(new BasicHttpBinding(), new EndpointAddress(“http://” + IPAddress + “:6996/IService”)); service = factory.CreateChannel(); service.Test(); 这是一个示例场景,准确解释我正在寻找什么。 假设我的机器上有两个IP(192.168.0.30和192.168.0.31)。 它们都可以达到192.168.0.32。 如果我现在运行此代码,它将从我的任何IP(.30或.31)中获取IP(.32)。 我如何强迫它通过我的特定IP(比如.30)。 有什么方法可以使用WCF吗?

WCF,BasicHttpBinding:停止新连接但允许现有连接继续

.NET 3.5,VS2008,使用BasicHttpBinding的WCF服务 我有一个Windows服务托管的WCF服务。 当Windows服务因升级,定期维护等原因关闭时,我需要正常关闭我的WCF服务。 WCF服务的方法可能需要几秒钟才能完成,而典型的卷每秒需要2-5个方法调用。 我需要以允许任何先前调用方法完成的方式关闭WCF服务,同时拒绝任何新调用。 通过这种方式,我可以在约5-10秒内达到安静状态,然后完成Windows服务的关闭周期。 调用ServiceHost.Close似乎是正确的方法,但它会立即关闭客户端连接,而无需等待任何正在进行的方法完成。 我的WCF服务完成了它的方法,但是没有人发送响应,因为客户端已经断开连接。 这是此问题提出的解决方案。 以下是事件序列: 客户端使用VS生成的代理类调用服务方法 服务开始执行服务方法 服务收到关闭请求 服务调用ServiceHost.Close(或BeginClose) 客户端已断开连接,并收到System.ServiceModel.CommunicationException 服务完成服务方法。 最终服务检测到它没有更多的工作要做(通过应用程序逻辑)并终止。 我需要的是客户端连接保持打开,以便客户知道他们的服务方法成功完成。 现在他们只是获得了一个封闭的连接,并且不知道服务方法是否成功完成。 在使用WCF之前,我使用套接字并且能够通过直接控制Socket来实现。 (即在仍然执行接收和发送时停止接受循环) 关闭主机HTTP端口非常重要,以便上游防火墙可以将流量定向到另一个主机系统,但现有连接保持打开状态以允许现有方法调用完成。 有没有办法在WCF中实现这一目标? 我尝试过的事情: ServiceHost.Close() – 立即关闭客户端 ServiceHost.ChannelDispatchers – 在每个上调用Listener.Close() – 似乎什么都不做 ServiceHost.ChannelDispatchers – 在每个上调用CloseInput() – 立即关闭客户端 覆盖ServiceHost.OnClosing() – 让我延迟关闭,直到我决定关闭,但在此期间允许新的连接 使用此处描述的技术删除端点。 这抹去了一切。 运行网络嗅探器以观察ServiceHost.Close()。 主机只关闭连接,不发送任何响应。 谢谢 编辑 :不幸的是,我无法实现系统正在关闭的应用程序级别的咨询响应,因为该领域的客户端已经部署。 (我只控制服务,而不是客户端) 编辑 :我使用Redgate Reflector来查看Microsoft的ServiceHost.Close实现。 不幸的是,它调用了一些我的代码无法访问的internal帮助器类。 编辑 :我还没有找到我想要的完整解决方案,但是Benjamin建议在输入服务方法之前使用IMessageDispatchInspector拒绝请求。

以编程方式在WCF EndpointAddress上设置标识

我在连接到WCF服务时使用以下函数创建System.ServiceModel.EndpointAddress : private static EndpointAddress GetEndPointAddress(string url, EndpointIdentity identity) { Uri baseAddress = new Uri(url); EndpointAddress endpointAddress = new EndpointAddress( baseAddress, identity, new AddressHeaderCollection()); return endpointAddress; } 我需要传入一个与我的web.config中的以下摘录相关的EndPointIdentity : 我的WCF服务使用X509证书,因此我的身份似乎必须是X509CertificateEndpointIdentity类型。 这个构造函数要求我传入证书…但我想传递一个dns值,如上所示。 任何人都可以建议我的方法有什么问题吗?

大二进制(byte )通过WCF传输文件

我正在尝试构建一个WCF服务,允许我从客户端向服务发送大型二进制文件。 但是我只能成功传输高达3-4MB的文件。 (当我尝试转移4.91MB时,我失败了,当然,除了之外) 如果我尝试发送4.91MB文件,我得到的错误是: exception消息:接收到http:// localhost:56198 / Service.svc的HTTP响应时发生错误。 这可能是由于服务端点绑定不使用HTTP协议。 这也可能是由于服务器中止HTTP请求上下文(可能是由于服务关闭)。 请参阅服务器日志以获取更多详 内部exception消息:基础连接已关闭:接收上发生意外错误。 内部exception消息:无法从传输连接读取数据:远程主机强制关闭现有连接。 内部exception消息:远程主机强制关闭现有连接 只要将byte []文件作为方法参数发送到公开的服务方法,就会在客户端发生此错误。 我在服务方法的第一行有一个断点,如果文件传输成功(低于3MB),则会触发断点并传输文件。 但是在这种情况下,只要调用该方法,就会出现错误。 如果出现此错误,则不会触发服务中的断点。 我将粘贴我的Service Web.config和Asp Page(Client)Web.config的各个部分。 如果您还需要发送文件并接受文件的代码,请告诉我,我也会发送。 服务Web.Config 客户端(Asp.net页面)Web.Config