Tag: #wcf

WCF RIA服务 – 加载多个实体

我正在寻找一种解决以下问题的模式,我认为这种模式很常见。 我正在使用WCF RIA Services在初始加载时将多个实体返回给客户端。 我希望两个实体都异步加载,以免锁定UI,我想利用RIA Services来做到这一点。 我的解决方案似乎在下面。 我会用这种方法遇到问题/限制吗? 这有更好的模式吗? 谢谢! //create proxy to Domain Service var proxy = new RIAService.Web.DomainContext(); //call service; fire event when Presentation entities have been returned var loadPresentations = proxy.Load(proxy.GetPresentationsQuery()); loadPresentations.Completed += new EventHandler(loadPresentations_Completed); //call service; fire event when Topics entities have been returned var loadTopics = proxy.Load(proxy.GetTopicsQuery()); loadTopics.Completed += new […]

如何通过wcf dataservice让应用程序使用不同的数据库

我们正在构建将销售给客户的ac#.Net应用程序,SQL Server数据库将由我们托管。 我们将为每个客户提供一个数据库。 我们不确定是否可以使用一个WCF数据服务来访问不同的数据库。 使用Entity Framework构建数据库。 如何实现此目的,以便客户端可以传入正确的数据库名称或连接字符串? 这个使用WCF数据服务的不同数据库表示它是可能的,但并没有真正涉及具体细节。 具有数据库的多个客户端(每个用于客户端)的此WCF服务看起来是相同的问题,但没有答案。

在WCF上重用我的PagedList对象

问题: 当T是EntitySearchResult对象时,我有一个自定义集合PagedList ,它作为PagedListOfEntitySearchResultW_SH0Zpu5从我的WCF服务返回。 我想在应用程序和服务之间重用此PagedList类型。 我的情景: 我创建了一个inheritance自List的PagedList类型。 此类型位于应用程序和WCF服务上引用的独立程序集上。 我在scvutil上使用/ reference选项来启用类型重用。 我也不希望返回任何数组,所以我也使用/collection映射到通用List类型。 我正在使用以下svcutil命令来生成服务代理: “C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Bin\NETFX 4.0 Tools\svcutil.exe” /collectionType:System.Collections.Generic.List`1 /reference:..\..\bin\Debug\App.Utilities.dll http://localhost/App.MyService/MyService.svc?wsdl /namespace:*,”App.ServiceReferences.MyService” /out:..\ServiceProxy\MyService.cs PagedList对象类似于: [CollectionDataContract] public partial class PagedList : List { public PagedList() { } /// /// Creates a new instance of the PagedList object and doesn’t apply any pagination algorithm. /// The only calculated […]

从WCT Restful服务中使用FileStream

我创建了一个WCF Restful服务,其代码如下: 接口: [ServiceContract] public interface ISIGService { [OperationContract] [WebInvoke(Method = “GET”, ResponseFormat = WebMessageFormat.Xml, BodyStyle = WebMessageBodyStyle.Bare, UriTemplate = “GetMultimedia/{id}”)] Stream GetMultimedia(string id); } 实现此服务的代码: public Stream GetMultimedia(string id) { string filePath = MultimediaBLL.GetFilePath(int.Parse(id)); if (string.IsNullOrEmpty(filePath)) return null; try { FileStream multimediaFileStream = File.OpenRead(filePath); return multimediaFileStream; } catch (Exception ex) { Console.WriteLine(“Not able to […]

在IIS6下,jquery ajax发布到WCF服务的post数据(方法参数)在IE中被删除(除非fiddler正在运行)

一段时间以来一直在打扰这个问题。 在IIS6和Windows身份validation下,每当我尝试使用jquery发布到WCF服务时,都会调用并执行service方法,但所有post数据(方法参数)都为null。 这似乎只发生在该机器上的IE8版本上。 这在Firefox中不会发生,当fiddler正在运行时(充当代理),这也不会发生。 此代码在IIS7下工作正常,并且似乎在IIS6匿名身份validation下正常工作。 post数据只是JSON。 $.callService(‘GetCurrentTemplates’, pagingData, GetCurrentTemplateSucceeded, ServiceFailed); $.callService = function (url, data, successHandler, failHandler) { var applicationUrl = $(“#hdApplicationUrl”).val(); $.ajax({ type: “POST”, //GET or POST or PUT or DELETE verb url: applicationUrl + “Service.svc/” + url, // Location of the service data: $.jsonSerialize(data), //Data sent to server contentType: “application/json; charset=utf-8”, // content […]

更新服务引用后,Project不会生成

更新服务引用后,我收到以下错误构建我的项目: 不包含’DefaultResolveType’的定义 在自动生成的Reference.cs上抛出错误,但DefaultResolveType方法应该在生成的类中,因为它是从’this’关键字调用的。 自上次成功构建以来,数据服务没有更改,客户端代码也没有更改。 [global::System.CodeDom.Compiler.GeneratedCodeAttribute(“System.Data.Services.Design”, “1.0.0”)] protected global::System.Type ResolveTypeFromName(string typeName) { global::System.Type resolvedType = this.DefaultResolveType(typeName, “Microsoft.Crm.Sdk.Data.Services”, “ITF.DataAccessLayer.CRM.CrmAccessService”); if ((resolvedType != null)) { return resolvedType; } return null; }

Web服务不使用代理类处理来自同一应用程序的多个同时请求

我有一个应用程序调度多个任务,调用不同的Web服务,一些相同的Web服务,但不同的方法。 每个任务都在一个时间间隔内执行,每个任务都在自己的线程中运行。 为了获得对webservice的引用,我有一个wsdl.exe生成的代理类,它在每个任务中实例化并且总是被处理掉。 但是,在运行应用程序时,任务实际上是在服务请求中等待彼此,Web服务在从任务x完成处理请求之前没有处理来自任务y的服务请求(我可以看到这是因为来自任务x的服务调用可能需要5分钟,任务y 100毫秒,但是如果y在x运行时开始,则在x完成后100毫秒完成)。 这是来自任务的代码(在自己的线程内运行): public class TaskX : TaskWrapper { public TaskX(Guid id, string name, EventQueue eventqueue) : base(id, name, eventqueue) { } protected override void DoTask() { try { var factory = new ServiceReferenceFactory(); using (var reference = factory.GetServiceReference()) { bool result; bool isSpecified; reference.Run(out result, out isSpecified); } } } } […]

WCF将自定义对象传递给客户端并运行其方法

这既是设计又是技术问题。 我不确定我这样做是对的…… 我有一个WCF API,它与DB通信并传回一个Person对象(在一个单独的.dll中定义)这有两个方法和属性。 该对象正从WCF发送到调用客户端。 我想在客户端上调用Person的方法。 我知道这些不能从API下游发送。 但是,如果我引用WCF使用的相同.dll,我应该能够将API Person转换为.dll Person然后运行方法吗? 我希望我很清楚我想要实现的目标。

Intranet – Web到远程wcf CredentialCache.DefaultNetworkCredentials无法正常工作

我有一个在IIS中托管的ASP.NET MVC Intranet应用程序,它添加了WCF服务引用,WCF驻留在另一台计算机中,并且还需要Windows身份validation。 在我的网站上,这段代码很有用: proxy = new MyProxyClient(“configurationName”, “remoteAddress”); proxy.ClientCredentials.Windows.ClientCredential.UserName = “myUserName”; proxy.ClientCredentials.Windows.ClientCredential.Password = “MyPassword”; proxy.SomeMethod(); //work great 但是,如果我希望凭证不被硬编码,我正在使用:CredentialCache.DefaultNetworkCredentials,如下所示: proxy = new MyProxyClient(“configurationName”, “remoteAddress”); proxy.ClientCredentials.Windows.ClientCredential = CredentialCache.DefaultNetworkCredentials; proxy.SomeMethod(); //not working throw exception 上面的代码抛出带有消息的SecurityNegotiationException: 调用者未被服务认证。 内部exception是: 无法满足安全令牌请求,因为身份validation失败。 如何在没有硬编码的用户名和密码的情况下将当前用户的凭据传递给WCF服务?

WCF返回Streams或Strings?

我一直对WCF和返回类型越来越感到沮丧。 我目前正在研究一种从SQL读取数据的方法,根据检索的数据量创建某种类型的新对象,然后使用从SQL检索的数据分配对象值。 我有适当的function来序列化为JSON和XML。 理想情况下,我想将我的序列化对象转换为字符串,以便我可以以转换的方式从浏览器中读取响应,希望以下示例更具说明性。 我在序列化对象并返回流时获得的好处是格式化是完美的,并且它在类中使用我的DataMembers,因此JSON中的响应将如下所示: {“GameID”:1,”ProposalID”:5} 但是当我在浏览器中检索数据时,它会要求我保存流文件,我在记事本中打开流来查看此结果。 这并不理想,因为结果不会作为字符串出现在浏览器上。 如果我返回一个字符串,我会得到数据,但是使用DataMembers没有正确格式化或者序列化的任何优点,因此信息非常简单,没有意义: “3151” 从这个例子中可以看出,我还检索了2个每个2个变量的SQL字段。 我不确定如何将结果附加到流上,因为它只返回最后一个结果(5,1),更不用说正确地返回它们了。 虽然我不确定我是否可以粘贴一些我想要实现的东西,但无论如何它都是: http : //api.justin.tv/api/user/show/justin.json 我的直接想法是使用XMLWriter或某种手动编写信息,但我希望能够为序列化和DataMemberfunction支付红利。 我的回程代码: foreach (MatchProposal proposal in Proposals) { returnStream = WriteJSON(SerializeToJSON(proposal)); } public MemoryStream SerializeToJSON(object serializeObject) { DataContractJsonSerializer serializer = new DataContractJsonSerializer(serializeObject.GetType()); MemoryStream memoryStream = new MemoryStream(); serializer.WriteObject(memoryStream, serializeObject); return memoryStream; } public Stream WriteJSON(MemoryStream memoryStream) { string json […]