Tag: #wcf

使用带有Microsoft Dynamics CRM 2013联机插件的Web服务

我在连接到用于MS Dynamics 2013插件的Web服务时遇到问题(在沙箱模式下运行,因为它在MS托管的在线版本上,而不是内部版本) 我面临的问题是,我似乎无法连接到我需要用来实现我正在尝试做的事情的Web服务。 我最初在app.config中有了web服务绑定,但我很快就知道app.config在这种情况下是无关紧要的(?),所以我继续在代码中创建绑定。 这是我提出的代码: BasicHttpBinding myBinding = new BasicHttpBinding(); myBinding.Name = “BasicHttpBinding_IClientSearch”; myBinding.Security.Transport.ClientCredentialType = HttpClientCredentialType.None; myBinding.Security.Transport.ProxyCredentialType = HttpProxyCredentialType.None; myBinding.Security.Message.ClientCredentialType = BasicHttpMessageCredentialType.UserName; myBinding.MaxBufferSize = 524288; myBinding.MaxBufferPoolSize = 524288; myBinding.MaxReceivedMessageSize = 524288; myBinding.ReaderQuotas.MaxDepth = 32; myBinding.ReaderQuotas.MaxArrayLength = 524288; myBinding.ReaderQuotas.MaxStringContentLength = 524288; myBinding.Security.Mode = BasicHttpSecurityMode.TransportWithMessageCredential; EndpointAddress endPointAddress = new EndpointAddress(EndPointURL); ClientSearchService.ClientSearchClient myClient = new ClientSearchService.ClientSearchClient(myBinding, endPointAddress); […]

在WCF Rest端点中使用参数“params string ”

我想定义一个OperationContract,我可以传递任意数量的字符串参数。 值应解释为字符串数组。 是否有可能在OperationContract中使用此类型的参数并在UriTemplate中定义它? [ServiceContract] public interface IRestService { [OperationContract] [WebGet(UriTemplate = “operations/{values}”)] void Operations(params string[] values); }

使用WAS将Autofac与WCF服务一起使用

我喜欢通过在配置文件中设置serviceActivations来托管没有.svc文件的服务的WCF 4.0function。 它使用默认服务工厂工作得很好但现在我正在尝试使用AutofaServiceHostFactory执行相同操作,因此我的依赖项将被正确注入。 在我尝试的所有场景中,当我尝试访问服务时仍然遇到此错误: 为WCF配置的服务“WCFAutofacWiring.MyService”未向Autofac容器注册 。 我在一个空的asp.net网站上托管我的服务。 这是我做的: Web.config: 然后,我在app_code文件夹中放置一个文件来注册我的依赖关系,如Autofac文档( Autofac WcfIntegration )中所述,我向调试器确认在服务启动时调用了代码: public static class AppStart { public static void AppInitialize() { AutofacHostFactory.Container = new AutofacBootstrapper().Configure(); } } 最后,这是我的注册: public class AutofacBootstrapper { public IContainer Configure() { var builder = new ContainerBuilder(); // register types builder.Register(x => new MyLanguageProvider(“en-US”)); builder.RegisterType(); return builder.Build(); } } […]

如何使用CodeDom创建一个接口方法

我正在使用CodeDom生成我的WCF服务接口和实现文件。 我在CodeMemberMethod上找不到任何可以生成接口方法的选项。 如果我使用MemberAttributes.Abstract,我几乎就在那里,但它包含对接口无效的abstract关键字。 有谁知道生成方法的正确语法? 这是我为生成接口文件而开发的代码:private void CreateServiceContractFile(Type entity,BoElement bo,DirectoryInfo serviceOutputDir,AppParameters appPrams){CodeCompileUnit serviceFileUnit = new CodeCompileUnit(); CodeNamespace importNameSpace = new CodeNamespace(“”); importNameSpace.Imports.Add(new CodeNamespaceImport(“System”)); importNameSpace.Imports.Add(new CodeNamespaceImport(“System.Collections.Generic”)); importNameSpace.Imports.Add(new CodeNamespaceImport(“System.Linq”)); importNameSpace.Imports.Add(new CodeNamespaceImport(“System.Runtime.Serialization”)); importNameSpace.Imports.Add(new CodeNamespaceImport(“System.ServiceModel”)); importNameSpace.Imports.Add(new CodeNamespaceImport(“System.ServiceModel.Web”)); importNameSpace.Imports.Add(new CodeNamespaceImport(“System.Text”)); importNameSpace.Imports.Add(new CodeNamespaceImport(“ALVIN.BusinessObjects”)); importNameSpace.Imports.Add(new CodeNamespaceImport(“DAOObjects = ALVIN.DAO”)); importNameSpace.Imports.Add(new CodeNamespaceImport(“ALIAS.BusinessObjects”)); importNameSpace.Imports.Add(new CodeNamespaceImport(“System.Data.Entity.Validation”)); importNameSpace.Imports.Add(new CodeNamespaceImport(“System.ComponentModel.DataAnnotations”)); importNameSpace.Imports.Add(new CodeNamespaceImport(“System.Data.Objects”)); importNameSpace.Imports.Add(new CodeNamespaceImport(“ALIAS.Common.Utility”)); importNameSpace.Imports.Add(new CodeNamespaceImport(“ALIAS.EventMessages”)); importNameSpace.Imports.Add(new CodeNamespaceImport(“ALIAS.ServiceCommon”)); importNameSpace.Imports.Add(new […]

禁止WCF客户端证书和用户名凭据

我在让WCF客户端连接到需要客户端证书和用户名/密码的服务器时遇到问题。 我已经validation使用JUST客户端证书使用此方法: var binding = new WSHttpBinding(SecurityMode.Transport); binding.Security.Transport = new HttpTransportSecurity(); binding.Security.Transport.ClientCredentialType = HttpClientCredentialType.Certificate; var ea = new EndpointAddress(EndpointUrl); using (var p = new ServiceReference1.AAAClient(binding, ea)) { try { p.ClientCredentials.ClientCertificate.SetCertificate( System.Security.Cryptography.X509Certificates.StoreLocation.CurrentUser, System.Security.Cryptography.X509Certificates.StoreName.My, System.Security.Cryptography.X509Certificates.X509FindType.FindBySubjectName, CertificateSubject); var x = p.RequiresClientCertificateOnly(); Console.WriteLine(“Status: ” + x.status); } catch (Exception ex) { Console.WriteLine(ex.ToString()); } Console.WriteLine(); } 下一个合乎逻辑的步骤是添加用户名/密码部分,但它返回403未经授权。 我知道凭证和证书是有效的,因为我在中间使用fiddler提供客户端证书和用户名/密码,它工作正常,只是当通过WCF使用它似乎不起作用,或使用发送两个客户端证书和用户名/密码。 尝试使用两者的代码如下(尝试使用WSHttpBinding和BasicHttpBinding – […]

WCF服务如何与我的winform应用程序交互?

我目前正在开发一个C#Windows窗体应用程序,我打算让它与服务器进行交互。 服务器将从我开发的移动应用程序接收发布,并且每当收到发布时,我的Windows窗体应用程序应该得到通知并给我通知。 为此,我打算为它使用WCF双工服务。 例如,我的移动应用程序发送一个post到我的服务器。 一旦我的服务器读取并接收新的post,该服务应该向我的winform应用程序发送一条消息,提醒我收到了一个post。 winform应用程序的UI应根据我想要更新的内容进行更新。 (例如添加新面板) 这基本上是我希望它能够工作的方式 WCF服务在我的服务器上运行 Windows窗体使用双工合同连接到我的服务器的WCF服务 移动应用程序发布到网页 一旦网页收到发布,asp.net将调用WCF服务 WCF双工服务接收发布并将信息发送到winform应用程序 我的winform应用程序又名WCF客户端使用收到的这条新消息更新UI 我的问题是,第4步如何进入第5步? 具体而言,服务如何在收到发布后将信息发送到winform应用程序。 更具体地说,一旦从网页接收到发布,就调用服务合同并且服务发送和接收信息,服务如何利用回叫信道将信息发送到winform。应用程序并相应地更新UI?

如何获取WCF Web服务的IP地址

从C#客户端(System.ServiceModel.ClientBase 的实例)调用WCF Web服务时,如何获取我连接的服务器的IP地址? 上下文:我们为一些WCF服务设置了一个Web服务器场,我需要知道在发生exception时我连接到哪个特定服务器。

控制WCF XML输出中的命名空间前缀

我的WCF服务的当前输出如下(只有一部分显示如下): STATE_CD 1 STATE_CD_TXT Alabama STATE_CD_SHORT_TXT AL 在该示例中,对于每个US状态重复“RowDetail”元素。 我有两个问题: 如何删除标签中的“a:”前缀。 我假设我需要更改xmlns设置,但我不知道如何在不抛出错误的情况下执行此操作。 我查看了其他线程,但无法使其工作。 是否可以从输出中删除无关元素,即“行”和“字段”? 我理解为什么他们在那里 – 这是由于我如何设置我的课程(下面发布),但看看IMO是很麻烦的。 类别: [DataContract] public class Results2Detail { [DataMember] public RowDetail[] Rows; } [DataContract] public class RowDetail { [DataMember] public FieldDetail[] Fields; } [DataContract] public class FieldDetail { [DataMember] public String name; [DataMember] public String value; }

Process.Start没有创建子进程(端口句柄inheritance)?

我在使用TCP绑定的自托管应用程序中有一个WCF服务。 如果我从应用程序启动外部进程“commandLineApp”,即使在我的应用程序关闭后仍然继续,我的应用程序下次启动WCF服务时会遇到问题。 WCF说地址/端口已经在使用中。 如果在重新启动应用程序之前关闭外部应用程序(根本不使用WCF或任何套接字),WCF服务就可以正常启动。 看起来我的应用程序中的套接字句柄以某种方式由新进程“commandLineApp”inheritance,并且在该进程退出之前不会被释放。 如何阻止其他进程从我的主应用程序inheritance句柄(或成为子进程?)? 目前我正在使用Process.Start启动其他进程,使用UseShellExecute设置为False,因为我需要设置EnvironmentVarables和RedirectStandardOutput / Error。 我认为如果我设置UseShellExecute = true,则会阻止子进程设置,但是我没有得到我需要的所有function。 有没有解决这个问题的方法? 请参阅下面的示例代码 ProcessStartInfo psi = new ProcessStartInfo(); psi.FileName = “commandLineApp.exe”; psi.Arguments = “/someParameter”; psi.EnvironmentVariables.Add(“…”, “…”); psi.RedirectStandardOutput = true; psi.RedirectStandardError = true; psi.UseShellExecute = false; Process process = new Process(); process.StartInfo = psi; process.Start(); // Monitor if process with PID = process.Id is running […]

使用WCF服务返回List

我有一个Employee类,每个员工都有一个应用的叶子列表。 是否可以将列表AppliedLeave作为WCF中的[DataMember] ? [DataContract] public class Employee { [DataMember] public string UserID { get; set; } [DataMember] public int EmployeeNumber { get; set; } [ForeignKey(“EmployeeUserID”)] [DataMember] public List AppliedLeave { get { return _appliedLeaves; } set { _appliedLeaves = value; } } private List _appliedLeaves = new List(); … } 有没有其他方法可以做到这一点? 谢谢你对此事的考虑 我延伸我的问题 这是我的休假class: [DataContract] […]