Tag: #wcf

删除序列化程序创建的空xmlns

我有一个由“添加服务引用…”操作生成的对象,我手动使用我编写的通用序列化程序对其进行序列化。 我的问题是数据契约有一些内部对象。 序列化程序将空名称空间属性添加到内部对象的起始标记。 有没有办法阻止这种情况发生?

c#WCF捕获Base类型的故障exception

我一直在寻找如何在c#中找到基本故障合同类型的方法。 我希望我的所有错误契约都从一个类inheritance并在MVC控制器中有一个catch(FaultException fex)。 DataContracts [DataContract] public class BaseClass1 { } [DataContract] public class Class2 : BaseClass1 { } 服务 [ServiceContract] public interface IService1 { [OperationContract] [FaultContract(typeof(BaseClass1))] [FaultContract(typeof(Class2))] //Do I need this one? void ThrowClass2(); } public class Service1 : IService1 { public void ThrowClass2() { throw new FaultException(new Class2(), “Class2 Reason”); } } 服务消费者 FaultTestService.Service1Client […]

如何通过用户凭证访问AD FS声明?

我正在开发一个WCF Web服务,以在用户的​​登录操作与其活动目录角色和权限之间建立中介。 我不希望我的主机应用程序直接与AD FS通信。 我希望任何主机应用程序都使用我的Web服务,它将根据给定的凭据提供必要的信息。 在我的Web方法中,我需要通过用户的登录凭据从AD FS(WIF)获取声明。 我的Web方法将有两个输入参数,Window用户的电子邮件ID / Windows帐户名和密码。 因此,我希望通过给定用户的凭证在我的Web方法中访问AD FS声明。 如何通过给定用户的凭证获得AD FS声明?

使用从外部解决方案托管在Windows服务中的WCF服务

我使用以下演练设置了在Windows服务中托管的WCF库: http://msdn.microsoft.com/en-us/library/ff649818.aspx 消费者winforms位于同一解决方案中,该解决方案位于我的工作PC的C:驱动器本地。 演练工作即winforms按钮给出了正确的答案。 如果我在C-Drive上创建一个新的解决方案,其中包含一个Windows窗体项目,我无法成功添加对此运行服务的service reference ,我收到以下消息: 详细信息说明如下: 无法识别URI前缀。 元数据包含无法解析的引用:’net.tcp:// localhost:8526 / Service1’。 无法连接到net.tcp:// localhost:8526 / Service1。 连接尝试持续时间跨度为00:00:02.0020000。 TCP错误代码10061:无法建立连接,因为目标计算机主动拒绝它127.0.0.1:8526。 无法建立连接,因为目标计算机主动拒绝它127.0.0.1:8526如果在当前解决方案中定义了服务,请尝试构建解决方案并再次添加服务引用。 为什么我可以将此服务引用添加到与服务相同的解决方案中的项目,而不是来自不同解决方案中的项目? 编辑 我的同事在MSDN文章中发现了一个错误 – 我在这里详细说明了他的发现

WCF:序列化为数组的通用列表

所以我正在使用WCF和我的服务返回包含通用列表的类型。 WCF目前正通过线路将这些转换为arrays。 有没有办法配置WCF以后再将它们转换回列表? 我知道在添加服务引用时单击高级有一种方法,但我正在寻找配置文件或类似的解决方案。 [DataContract(IsReference = true)] public class SampleObject { [DataMember] public long ID { get; private set; } [DataMember] public ICollection Objects { get; set; } } 这也很奇怪,因为一个服务将其作为列表返回,另一个服务作为数组返回,我很确定它们的配置相同。

EF与POCO + WCF + WPF。 在客户端重用POCO课程还是使用DTO?

我们正在开发一个带有WPF客户端的3层应用程序,它通过WCF与BLL进行通信。 我们使用EF访问我们的数据库。 我们一直在使用EF的默认EntityObject代码生成器,但是当通过线路发送这些对象时,以及在BLL中处理和重新附加它们时会遇到很多问题和序列化问题。 我们即将切换到POCO模板,并重写数据访问和我们应用程序的通信部分(我们希望有一个更清洁的架构,而不是那种“魔术代码”。 我的问题是在客户端重用POCO类是否是个好主意? 或者我们应该创建单独的DTO类? 即使它们与POCO实体类相同? 这两种方法的优点/缺点是什么?

保存两个实体之间的关系和NN关联

我有一个带有poco对象的Entity Framework 4.0。 edmx模型文件是从数据库生成的。 这个datacontext是通过WCF服务访问的,它只是意味着我收到了一些对象,我需要将它们附加到当前的datacontext(或者用密钥对应重新加载它们)。 一切似乎工作正常,除了一个案例: 我在两个表之间有一个NN关系,所以我有一个关联表,除了两个表的ID之外没有任何字段: LINQ将此转换为以下架构,这似乎是正确的。 当我检索数据时没有问题,我自己插入Right_group的数据被正确地转换为“我的权利/群组集合中的新对象”。 但是,如果我尝试修改某些内容并保存,则无效 public void SaveRights(Group group, List rights){ //here, group and rights are objects attached to the database group.Rights.Clear(); group.Rights.AddRange(rights); _dataContext.SaveChanges(); } 所以我的问题是:如何保存这两个对象的“关系”? 谢谢!

从客户端的不同文件加载WCF配置

许多人面临的WCF中的一个常见问题是不可能从不同的配置文件加载客户端配置。 这是开发人员想要部署一些二进制文件以及独立配置文件(也可能位于资源文件或其他配置文件中)以避免修改主配置文件时的常见情况。 我找到了两个参考: http://weblogs.asp.net/cibrax/archive/2007/10/19/loading-the-wcf-configuration-from-different-files-on-the-client-side.aspx http://social.msdn.microsoft.com/forums/en-US/wcf/thread/f33e620a-e332-4fd4-ae21-88c750437355/ 哪个是关于它的最佳解决方案? 有关最佳解决方案的任何建议吗? 我使用VS 2008和.NET 3.5。

如何从一个客户端使用多个WCF服务

我还在学习整个WCF的事情,所以请在这里忍受我。 我所拥有的是使用C#和VS 2008创建的两个自托管服务: 服务#1添加两个数字并返回结果。 服务#2返回数字的平方。 我希望客户能够向服务1发送两个号码,得到总和,然后将总和发送到服务2并获得正方形。 我为这两个服务都有两个生成的代理,我可以在它们上使用Intellisense,因此该部分可以正常工作。 现在我如何配置我的app.config文件,以便我可以与这两个服务进行通信? 现在,每当我尝试这样做时,我都会得到一个例外。 [如果我一次只在app文件中有一个配置,客户端工作正常,并尝试只调用该服务器。] 我想这是一个非常无趣的问题,答案可能是“以_____方式构建配置文件”,但Google似乎没有示例/指南。 有人知道怎么做吗? 注意: 从一个客户端客户端使用多个WCF服务虽然听起来像重复不是我想要的。 编辑:感谢marc_s,我得到了它的工作 由于两个服务都运行在不同的应用程序中,我不需要拆分服务器配置文件,但这是我对客户端配置文件所做的:首先使用SvrUtil.exe自动生成配置文件,然后以这种方式合并它们: … … … …

使用SqlFileStream从WCF服务返回流

我有一个WCF服务,用户可以从中请求大型数据文件(存储在启用了FileStream的SQL数据库中)。 这些文件应该流式传输,并且在发送之前不会加载到内存中。 所以我有以下方法应该返回一个由WCF服务调用的流,以便它可以将Stream返回给客户端。 public static Stream GetData(string tableName, string columnName, string primaryKeyName, Guid primaryKey) { string sqlQuery = String.Format( “SELECT {0}.PathName(), GET_FILESTREAM_TRANSACTION_CONTEXT() FROM {1} WHERE {2} = @primaryKey”, columnName, tableName, primaryKeyName); SqlFileStream stream; using (TransactionScope transactionScope = new TransactionScope()) { byte[] serverTransactionContext; string serverPath; using (SqlConnection sqlConnection = new SqlConnection(ConfigurationManager.ConnectionStrings[“ConnString”].ToString())) { sqlConnection.Open(); using (SqlCommand sqlCommand […]