Tag: #wcf

您将如何在WCF数据服务中实现API密钥?

有没有办法要求URL中的API密钥/或其他一些传递服务私钥的方式来授予对数据的访问权限? 我现在有这个…… using System; using System.Data.Services; using System.Data.Services.Common; using System.Collections.Generic; using System.Linq; using System.ServiceModel.Web; using Numina.Framework; using System.Web; using System.Configuration; [System.ServiceModel.ServiceBehavior(IncludeExceptionDetailInFaults = true)] public class odata : DataService { public static void InitializeService(DataServiceConfiguration config) { config.SetEntitySetAccessRule(“*”, EntitySetRights.AllRead); //config.SetServiceOperationAccessRule(“*”, ServiceOperationRights.All); config.DataServiceBehavior.MaxProtocolVersion = DataServiceProtocolVersion.V2; } protected override void OnStartProcessingRequest(ProcessRequestArgs args) { HttpRequest Request = HttpContext.Current.Request; if(Request[“apikey”] != […]

如何通过WCF实现inheritance的Dictionary

我正在尝试实现一个用于WCF的字典。 我的要求是: 实际(私有变量或基类)类型等同于Dictionary Comparer = System.StringComparer.InvariantCultureIgnoreCase 自定义(覆盖/新)添加(键,值)方法(包括validation)。 覆盖ToString() 在客户端和主机上使用相同类型 我试图在WCF主机和客户端项目共享的公共项目中使用此类: [Serializable] public class MyDictionary : Dictionary { public MyDictionary() : base(System.StringComparer.InvariantCultureIgnoreCase) { } public new void Add(string key, object value) { /* blah */ } public override string ToString() { /* blah */ } } [DataContract] [KnownType(typeof(MyDictionary))] [KnownType(typeof(object[]))] [KnownType(typeof(double[]))] [KnownType(typeof(string[]))] [KnownType(typeof(DateTime[]))] public class ResultClass { […]

Config中System.Object的WCF已知类型

我正在尝试在配置中指定一个已知类型,但我遇到的问题是它派生自Object。 我可以通过属性指定已知类型。 但在这种情况下,我需要从配置中使其工作。 这是一个例子。 以下工作正常: [ServiceContract] [ServiceKnownType(typeof(MyData))] public interface IContract { [OperationContract] void Send(object data); } [DataContract] public class MyData { [DataMember] public string Message { get; set; } } 但是,如果我删除ServiceKnownType属性并将以下内容放入配置中: 我得到一个ConfigurationErrorsException,消息“属性’type的值’无效。错误是:System.Object类型不能用作config中的声明类型。” 无论如何通过配置使这项工作?

使用SelfHosting时,我可以自动托管app.config中的所有服务吗?

我正在编写一个需要托管多个WCF服务的应用程序。 WCF的优势之一是能够通过在app.config文件中指定设置来配置服务而无需重新编译。 在自托管时,似乎没有一种开箱即用的方式来自动托管app.config文件中的服务。 我发现这个问题提到了一个可能的解决方案,即在运行时动态枚举app.config中列出的服务,并为每个服务创建一个ServiceHost。 但是,我的服务,合同和托管应用程序都在不同的程序集中。 这会导致Type.GetType(string name)无法找到我的服务类型(返回null ),因为它是在不同的程序集中定义的。 如何动态地托管app.config文件中列出的所有服务(即,在我的自托管应用程序中没有硬编码new ServiceHost(typeof(MyService)) ? 注意:我的app.config是使用Visual Studio 2010中的“WCF配置编辑器”生成的。 另请注意:我的主要目标是由app.config文件驱动,因此只有一个配置点。 我不想在一个单独的位置配置它。 编辑 :我能够读取app.config文件(请参阅此处 ),但需要能够解析不同程序集中的类型。 编辑 :下面的答案之一促使我尝试在app.config中指定AssemblyQualifiedName而不仅仅是基本类型名称。 这可以解决Type.GetType()问题,但是无论我如何获得类型, ServiceHost.Open()现在都会失败并出现InvalidOperationException : // Fails string typeName = typeof(MyService).AssemblyQualifiedName; Type myType = Type.GetType(typeName); ServiceHost host = new ServiceHost(myType); host.Open(); // throws InvalidOperationException // Also fails Type myType2 = typeof(MyService); ServiceHost host2 = new ServiceHost(myType2); […]

WCFexception处理

如果我的WCF服务中发生exception,那么将该错误传达给客户端的最佳方法是什么? 我应该在服务上登录并重新抛出soapexception吗? 或者我应该记录它并返回用户友好的消息?

在一个WCF服务中托管多个合同

是否可以在一个WCF服务中托管多个服务合同? 如果是这样,怎么样? 我一直在谷歌搜索和一些post说你可以做(​​但不是如何)和其他人说,这是不可能的。 当我运行服务器时,我收到此错误: 在服务“ConsoleAppWcfServer.FooService”实现的合同列表中找不到合同名称“ConsoleAppWcfCommon.IBarService”。 这是我的服务器代码: static void Main(string[] args) { string serviceAddress = “net.tcp://localhost:8088/FooBarService”; // I’m stuck here as I have to pick *one* service ServiceHost selfServiceHost = new ServiceHost(typeof(FooService)); // I can add both endpoints here, but this is what gives me the error. selfServiceHost.AddServiceEndpoint(typeof(IFooService), new NetTcpBinding(), serviceAddress); selfServiceHost.AddServiceEndpoint(typeof(IBarService), new NetTcpBinding(), serviceAddress); selfServiceHost.Open(); […]

如何在WCF服务和主机应用程序之间进行通信?

我通过本教程创建了一个WCF服务。 这很好用,没问题。 现在我在托管应用程序中托管服务。 但与此同时,我希望将客户端的输入用于主机应用程序中的服务。 我不需要客户端和服务之间的双工通信。 我只需要服务和主机通信之间的通信。 处理这个问题的最佳方法是什么?

在Windows Azure上部署WCF服务

只是为了澄清我是第一次用azure工作。 几个月前我用SQL Server连接创建了一个Restful WCF服务。 我在IIS上使用SQL Server Express 2012上的数据库部署了WCF。该服务没有问题。 [OperationContract] [WebGet(UriTemplate = “feed/{ID}/{Rating}/{Feed}”, ResponseFormat = WebMessageFormat.Json)] string feed(string ID, string Rating, string Feed); 现在我必须将WCF服务移动到Azure。 问题是我不知道如何将WCF部署到azure,如果甚至可以将WCF部署到azure。 数据库已移至azure。

WCF Test Client无法添加服务,无法获取元数据

我可以告诉我为什么当我尝试添加服务时出现此错误? 错误:无法从http:// myserver / myapp获取元数据。 如果这是您有权访问的Windows(R)Communication Foundation服务,请检查您是否已在指定地址启用元数据发布。 有关启用元数据发布的帮助,请参阅http://go.microsoft.com/fwlink/?LinkId=65455上的MSDN文档。 WS-Metadata Exchange错误URI: http:// myserver / myapp元数据包含无法解析的引用:’ http:// myserver / myapp ‘。 远程服务器返回意外响应:(405)方法不允许。 远程服务器返回错误:(405)方法不允许.HTTP GET错误URI: http:// myserver / myapp下载’ http:// myserver / myapp ‘时出错。 请求失败,HTTP状态为403:Forbidden。 更新:我已经有以下端点了, 我也设置了服务行为:

如何设置ClientCredentials?

我正在尝试使用WCF服务: 该服务的配置是: 当我尝试拨打该服务时: public async void LoadCities() { _client = new FlightInfoServiceClient(Maquette_MyAirport_Win8.FlightService.FlightInfoServiceClient.EndpointConfiguration.wsHttpBindingConfiguration, “http://servuucs.fr/FlightInfoWebService/FlightInfoService.svc”); var citiesResponse = await _client.GetAllCitiesAsync(new BaseRequest()); var myCities = citiesResponse.Cities; } 我抓住了这个例外: 错误:UnAuthorizedAccess说明:您无权访问此服务 如何设置ClientCredentials?