Tag: #wcf

使用NetNamedPipe的WCF多个应用程序

我试图在同一台机器上运行多个WCF服务托管应用程序。 我想在一个应用程序中运行多个应用程序 – 而不是多个服务。 var host = new ServiceHost(typeof(MyClass1), new Uri[] { new Uri(“net.pipe://localhost”) }); host.AddServiceEndpoint(typeof(ISomeInterface), new NetNamedPipeBinding(), “FOO”); host.Open(); 我为每个应用程序更改“FOO”,但仍无法启动多个服务。 猜猜它很简单,但我卡住了:( 问候

WCF:WSDL优先方法:生成故障类型的问题

我目前正在创建一个与WS-I Basic Profile 1.1兼容的WCF Web服务。 我正在使用wsdl-first方法(实际上是第一次),首先定义复杂类型的xsd,WSDL,然后使用svcutil.exe生成相应的服务器以及客户端接口/代理。 到目前为止一切正常。 然后我决定在我的WSDL中添加一个错误 。 用svcutil重新生成成功,但后来我注意到我生成的错误没有我在xsd文件中定义的属性(由我的WSDL导入)。 复杂数据类型xsd 故障XSD定义 WSDL使用上述两种XSD 生成.Net故障对象 [System.Diagnostics.DebuggerStepThroughAttribute()] [System.CodeDom.Compiler.GeneratedCodeAttribute(“System.Runtime.Serialization”, “3.0.0.0”)] [System.Xml.Serialization.XmlSchemaProviderAttribute(“ExportSchema”)] [System.Xml.Serialization.XmlRootAttribute(IsNullable=false)] public partial class groupFault : object, System.Xml.Serialization.IXmlSerializable { private System.Xml.XmlNode[] nodesField; private static System.Xml.XmlQualifiedName typeName = new System.Xml.XmlQualifiedName(“groupFault”, “http://sicp.services.siag.it/groups_v1.wsdl”); public System.Xml.XmlNode[] Nodes { get { return this.nodesField; } set { this.nodesField = value; } } public […]

异步WCF自托管服务

我的目标是实现异步自托管WCF服务,该服务将在单个线程中运行所有请求并充分利用新的C#5异步function。 我的服务器将是一个Console应用程序,我将在其中设置SingleThreadSynchronizationContext ,如此SingleThreadSynchronizationContext指定,创建并打开ServiceHost ,然后运行SynchronizationContext ,以便在同一个线程中处理所有WCF请求。 问题是,尽管服务器能够成功处理同一线程中的所有请求,但异步操作阻止了执行并被序列化,而不是隔行扫描。 我准备了一个简化的样本来重现这个问题。 这是我的服务合同(服务器和客户端相同): [ServiceContract] public interface IMessageService { [OperationContract] Task Post(String message); } 服务实现如下(它有点简化,但最终实现可以访问数据库,甚至以异步方式调用其他服务): public class MessageService : IMessageService { public async Task Post(string message) { Console.WriteLine(string.Format(“[Thread {0} start] {1}”, Thread.CurrentThread.ManagedThreadId, message)); await Task.Delay(5000); Console.WriteLine(string.Format(“[Thread {0} end] {1}”, Thread.CurrentThread.ManagedThreadId, message)); return true; } } 该服务托管在控制台应用程序中: static void Main(string[] args) { […]

使用WCF Rest服务下载文件?

如果有一种方法使用rest via stream上传文件,还会有“ Download ”吗? 如果是的话,你能告诉我怎么样? 提前致谢!

如何使用ClientInspector修改WCF消息头的MustUnderstand

我从WCF客户端调用非WCF服务。 WCF客户端包括“MustUnderstand”头属性设置为“1”。 这是典型的SOAP请求: 2010-08-23T20:48:52.680Z 2010-08-23T20:53:52.680Z blablabla blablabla 8/23/2010 4:48:51 PM 123 现在,这是我回来的回应。 soapenv:MustUnderstand WSWS3173E: Error: Did not understand "MustUnderstand" header(s):{http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd}Security 注意关于MustUnderstand的部分没有被理解。 此服务的所有者已指出它们允许具有WSSE名称空间前缀但实际上不在XSD中的元素,并执行一些其他处理以阻止它们接受MustUnderstand =“1”,因此我必须找到一种方法使用MustUnderstand =“0”发送消息。 我尝试使用MessageHeader属性在MessageContract中为代理客户端更改此项,但这没有帮助。 接下来,我实现了一个自定义客户端消息检查器。 我为每个MSDN创建了一个自定义行为扩展元素和一个IEndpointBehavior的类,这些都是微不足道的,但这里是为了完整性: public class ExClientBehavior : IEndpointBehavior { #region IEndpointBehavior Members public void AddBindingParameters(ServiceEndpoint endpoint, BindingParameterCollection bindingParameters) { // no op } public void ApplyClientBehavior(ServiceEndpoint endpoint, ClientRuntime clientRuntime) { ExInspector […]

System.ServiceModel.AddressAccessDeniedException:HTTP无法注册URL http :: 8080

我创建了我的第一个自托管WCF服务。 我在C#控制台应用程序中托管它,但它抛出一个错误: System.ServiceModel.AddressAccessDeniedException:HTTP无法注册URL http:8080 当我以管理员身份运行Visual Studio 2013时,它运行良好,但如果我不这样做则不行。 那么任何方法来自动完成它而不是作为ADMIN启动VS? 到目前为止,我创建了一个HelloService类库,其中我添加了一个WCF服务,该服务由一个接口IHelloService和HelloService 。 IHelloService : namespace HelloService { [ServiceContract] public interface IHelloService { [OperationContract] String GetMsg(); } } HelloService : namespace HelloService { public class HelloService : IHelloService { public String GetMsg() { return “Service Accessed”; } } } 然后我创建了一个C#控制台应用程序HelloServiceHost ,它有一个app.config文件: 和program.cs文件: using HelloService; using System.ServiceModel; namespace HelloServiceHost […]

许多并发客户端和数据库访问的WCF服务

我是WCF服务的新手,并想知道解决以下问题的最佳方法是什么。 我有很多客户(~200 – ~500)都在工作日期间不断地提出我的服务请求。 大多数请求涉及询问底层数据库以反馈正确的响应。 我关心的是从传入请求中产生的潜在数据库连接数。 如果所有客户端同时发出请求,那么数据库服务器将受到严重打击。 如果可能的话,我想避免与数据库建立多少连接。 是否更好地限制与WCF服务的并发连接数,从而无意中减少了可能的数据库连接数? 我已经看过使服务成为生成线程来执行数据库事务的单例,因此我可以控制线程的数量,但这是否过度,会限制与服务的连接是否足够? 非常感谢任何建议。

使用PrincipalContext.ValidateCredentials对本地计算机进行身份validation时出错?

我有一个WCF服务,其中包含一个Login方法,该方法根据本地计算机凭据validation用户名和密码,并且在看似随机的一段时间后,它将停止为某些用户工作。 实际的登录命令如下所示: public UserModel Login(string username, string password, string ipAddress) { // Verify valid parameters if (username == null || password == null) return null; try { using (var pContext = new PrincipalContext(ContextType.Machine)) { // Authenticate against local machine if (pContext.ValidateCredentials(username, password)) { // Authenticate user against database using (var context = new MyEntities(Connections.GetConnectionString())) { […]

记录WCF接口的最佳方法是什么?

所以我正在使用WCF,并希望记录我的界面和服务,以便为另一家公司提供内部应用程序。 记录这些界面的最佳方法是什么? 我更喜欢将文档与代码内联,然后对输出HTML有一些美化,但我不确定是否有推荐的方法来执行它。

如何将代理凭据设置为特定的wcf客户端?

我需要连接到一些公共wcf服务,但我和服务之间有一些代理。 如果我使用默认代理设置,如 要么 HttpWebRequest.DefaultWebProxy 它工作得很好,但我不需要为整个应用程序设置代理设置,我需要为特定连接设置它。 那我该怎么做呢? 我看到了ProxyAddress属性 (client.Endpoint.Binding as BasicHttpBinding).ProxyAddress 但是没有任何凭据属性…我想以某种方式修改HttpWebRequest,但我不知道如何得到它… 解决了 谢谢大家的答案。 AntonK的答案适合解决我的问题。 在这个问题是实际的时候,我以同样的方式解决了它,但没有使用web.config并编写了这个方法 void SetProxySettings(ClientBase client, bool useProxy, string address, int port, string login, string password) where TChannel : class { if (!useProxy) return; var b = client.Endpoint.Binding as BasicHttpBinding; if (b == null) { System.Diagnostics.Debug.WriteLine(“Binding of this endpoint is not BasicHttpBinding”); return; […]