Tag: #wcf

禁用WCF JSON服务中的类型提示

我有一个相对简单的问题,我似乎无法找到答案。 当WCF执行对象的序列化时,它会自动应用“类型提示”。 对于Json服务,这会在每个复杂对象上生成一个名为__type的额外字段。 定义为的对象: [DataContract] public class SomeObject { [DataMember] public string First { get; set; } [DataMember] public string Last { get; set; } } 会序列化为: { “First” : “Hello”, “Last” : “World!”, “__type” : “SomeObject#MyNamespace.SomeObject” } 通常这不是问题。 不幸的是,当您开始将类嵌套到相当大且复杂的结构中时,这会导致返回客户端的JSON响应大小的大量开销。 肯定有一种方法可以禁用这种行为,但我找不到一个( 2007年Rick Strahl也没有回来 ……但是它是2010年,我希望有人已经弄明白了)。

使用WCF通过线路传输最少量的数据

我的项目有一个netTCP WCF服务。 这是它的app.config: 是否有任何可以做的事情来最大限度地压缩通过线路发送的数据? 我的项目是内部的,因此速度和处理能力基本上没有问题。 压缩从客户端发送到WCF服务的数据有哪些好的提示和技巧?

Sequence不包含匹配元素 – EntityFramework

我正在使用EF 6.1.0并正在创建WCF服务。 首先,我创建了一个包含我的实体,Mappers和Context的类库,用于初始化EF。 我还创建了一个包含上下文实例的类,并具有以下代码: public IQueryable GetAll() { return context.[Entity].AsQueryable(); } 另一方面,我在同一个项目上创建了一个WCF服务,并在.svc文件中调用函数GetAll(),如下所示: public List GetList() { [iObject] repository = new [Object](new Context()); return repository.GetAll().ToList(); } 该项目正在建设中。 我甚至检查了配置,它位于正确的数据库中。 但是,应该创建的数据库和表不存在,并且返回中显示错误“Sequence contains no matching element”。 如果这个令人困惑,您可以使用Code First Entity Framework向我指出WCF服务的一些链接。

“在读取XML数据时已超出最大字符串内容长度配额(8192)”将XML字符串发送到WCF时出错

我正在使用.NET,C#应用程序,该应用程序打算将一个长XML字符串发送到WCF服务方法以进行进一步操作。 当我的应用程序尝试在运行时将XML字符串发送到WCF服务时,我收到一条错误消息: “The formatter threw an exception while trying to deserialize the message: There was an error while trying to deserialize parameter http://tempuri.org/:strProdUserDataXML. The InnerException message was ‘There was an error deserializing the object of type System.String. The maximum string content length quota (8192) has been exceeded while reading XML data. This quota may be […]

如何生成.svc文件?

我创建了我的第一个WCF服务并在我的计算机上进行了测试,并且它可以工作。 存在的文件是接口,该接口的实现和app.config文件。 现在是时候在一个真正的IIS服务器上托管它了,我被告知IIS在接收来电时会查找.svc文件。 这是我发现的: IIS中托管的WCF服务在IIS应用程序中表示为特殊内容文件(.svc文件)。 此模型类似于ASMX页面在IIS应用程序内表示为.asmx文件的方式。 .svc文件包含特定于WCF的处理指令(@ServiceHost),该指令允许WCF托管基础结构激活托管服务以响应传入消息。 有人可以指导我如何创建这个文件,以便我可以托管它? 谢谢!

WCF服务405方法不允许例外

我正在Visual Studio 2008中编写WCF服务以托管在Windows 2008 Standard服务器上。 我在IIS7中创建了一个新的Web站点,其自己的应用程序针对ASP.NET 2.0。 我在服务器角色中添加了.NET 3.0 Frameworkfunction。 我已经完成了涉及* .svc扩展和aspnet_isapi模块的所有步骤。 我运行“ServiceModelReg -r”并重新启动IIS以及服务器本身。 我的项目针对构建的.NET framework 3.5。 我的解决方案使用到服务器Web目录的UNC路径将项目作为Web站点引用。 该项目构建没有错误,我可以在我的客户端项目(在我的Win XP开发虚拟机上)成功添加服务引用到我的WCF服务。 我的客户端项目构建并运行,但在服务方法( CheckDatabaseConnection )调用期间抛出exception。 我的web.config和服务类附在下面,后面是客户端应用程序。 我完全没有想法了! web.config中: IConnectivity.cs: [ServiceContract(Namespace=”http://validurl.net”)] public interface IConnectivity { #region Methods [WebGet()] [WebInvoke(Method=”GET”)] [OperationContract()] bool CheckDatabaseConnection(string server, string database, string user, string password); #endregion Methods } // interface IConnectivity Connectivity.svc.cs: public class […]

WCF NamedPipe CommunicationException – “管道已结束。 (109,0x6d)。“

我正在编写带有“状态工具”的Windows服务。 该服务托管一个名为管道端点的WCF,用于进程间通信。 通过命名管道,状态工具可以定期查询服务以获取最新的“状态”。 在我的开发机器上,我有多个IP地址; 其中一个是具有192.168.1.XX地址的“本地”网络。 另一个是“公司”网络,具有10.0.X.XX地址。 Windows服务在单个IP地址上收集UDP多播流量。 到目前为止,Windows服务只要使用“192.168.1.XX”地址就可以正常工作。 它始终正确地向客户报告状态。 一旦我切换到另一个“公司”IP地址(10.0.X.XX)并重新启动服务,我在检索状态时会得到连续的“CommunicationExceptions”: “There was an error reading from the pipe: The pipe has been ended. (109, 0x6d).” 现在,我不认为UDP客户端的“声明的”IP地址应该与Named-Pipe接口的function有关; 它们完全是应用程序的独立部分! 以下是相关的WCF配置部分: //On the Client app: string myNamedPipe = “net.pipe://127.0.0.1/MyNamedPipe”; ChannelFactory proxyFactory = new ChannelFactory( new NetNamedPipeBinding(), new EndpointAddress(myNamedPipe)); //On the Windows Service: string myNamedPipe = “net.pipe://127.0.0.1/MyNamedPipe”; myService = […]

客户端不会捕获通用的FaultException ,只有FaultException

我已经阅读了所有有关此内容的内容,但也许我错过了一些东西(好吧,我肯定错过了一些东西,否则它会有效) 我在服务器业务层中抛出了一些exception错误: public class RfcException : Exception { public RfcException(string _m, Exception _inner) : base(_m, _inner) { } public Dictionary ExtendedProperties { get { return extendedProperties; } protected set { extendedProperties = value; } } private Dictionary extendedProperties = new Dictionary(); } 我在服务中未处理,但我有一个IErrorHandler来捕获并创建一个FaultMessage : public class FaultErrorHandler : BehaviorExtensionElement, IErrorHandler, IServiceBehavior { public bool HandleError(Exception […]

WCF / S#arpArch:在请求中的第一次调用之后,底层ISession将关闭

我知道在SA中使用WCF已被弃用,因为它将转移到SA Contrib。 但是直到它有,我想我必须使用SA中的支持。 也就是说,我在调用WCF服务后关闭了底层的NHibernate会话。 我的存储库的DbContext.Session在第一次调用后关闭,因此在单个HTTP请求期间我不能多次调用我的服务。 我基于Northwind示例应用程序在我的项目中设置了WCF。 该示例仅在每个请求中调用一次WCF服务,因此此问题不会显示在那里。 但是,通过复制TerritoriesController中的以下行,可以轻松复制该问题: territories = territoriesWcfService.GetTerritories(); 这会抛出一个ObjectDisposedException:“Session is closed!Object name:’ISession’”。 有任何想法吗?

从客户端通过WCF取消长时间运行的任务

我有一个设置为PerCall的WCF服务 我想知道如何从客户端发送一个Start调用以启动一个长时间运行的进程,并发送一个Cancel命令来取消它 我的WCF服务看起来像这样 [ServiceBehavior(InstanceContextMode = InstanceContextMode.PerCall)] public class Service1 : IService1 { CancellationTokenSource cancelToken = new CancellationTokenSource(); public void Start() { var compute = Task.Factory.StartNew(StartLongRunningTask, cancelToken.Token); } public void Stop() { cancelToken.Cancel(); } private void StartLongRunningTask() { //process here } } 我想这里的问题是,每次呼叫到达服务器时,都会将其视为新请求。 那么如何在WCF中启动和取消长时间运行的任务呢? 编辑:我将它作为Windows服务托管