Tag: #wcf

为什么我突然收到这个错误?

所以我有一个WCF服务,里面有一个Process()方法。 此方法从一个表中读取字节数组(文件),并基本上将该文件中的数据放入多个表中。 它只是遍历每一行。 它在生产环境中工作了一个月以来一直很好。 现在突然间,它间歇地抛出这个错误: System.InvalidOperationException:与当前连接关联的事务已完成但尚未处理。 必须先处理事务,然后才能使用连接执行SQL语句。 可能有所帮助的东西:大约两周前,我们更换了生产网络和数据库服务器。 我们搬家后,这个错误一直在呕吐。 当我们在旧服务器上时,我从未遇到过这个问题。 但问题是,这个错误在前9-10天没有发生。 现在它突然间歇地发生了。 我已经上传了大文件(1k-2.5k行)并且它们工作正常,并且这个错误会引发更小的200行文件! 并且服务有时会完美地处理相同的文件。 代码片段:(它更大,但重复类似的操作) using (var scope = new TransactionScope()) { // loop through each row/invoice foreach (var row in Rows) { Invoice invoice = (Invoice)CreateObjectWithConstantData(typeof(Invoice), doc, applicationName); invoice = (Invoice)FillObjectWithUserData(invoice, row, -1, -1, string.Empty); invoice.InvoiceNumber = InvoiceDBImpl.SaveInvoice(invoice, processFileRequest.RunId); if (invoice.InvoiceNumber == Guid.Empty) { […]

WCF Restful返回HttpResponseMessage想要在设置内容时进行协商

我有一个WCF Restful服务,我希望这些方法返回HttpResponseMessage,因为它似乎是结构化的,而不仅仅是返回数据或exception或其他任何可能的方式。 我假设这是正确的,如果不让我知道,但我的问题是当我尝试设置HttpResponseMessage.Content时会发生什么。 当我这样做时,我在其中进行RESTful呼叫请求认证的客户端。 这是我的代码: 在界面中: [WebGet(UriTemplate = “/GetDetailsForName?name={name}” , ResponseFormat = WebMessageFormat.Json)] HttpResponseMessage GetDetailsForName(string name); 在课堂里: public HttpResponseMessage GetDetailsForName(string name) { HttpResponseMessage hrm = new HttpResponseMessage(HttpStatusCode.OK) { //If I leave this line out, I get the response, albeit empty Content = new StringContent(“Hi”) }; return hrm; } 我想尝试使用Request.CreateResponse但我似乎无法从我的WCF Restful方法获取请求。 OperationContext.Current.RequestContext没有CreateResponse。 有什么指针吗?

在WCF上发送Tuple对象?

WCF的Data Contract Serializer是否支持System.Tuple类(即,我可以将Tuple对象传递给WCF调用和/或作为部分或全部结果接收它们)吗? 我找到了这个页面 ,但不是明确的,明确的“你可以发送和接收带有WCF的元组”我希望的答案。 我猜你可以,只要Tuple本身的所有类型都受到Data Contract Serializer的支持 – 有人能为我提供更明确的答案吗? 谢谢。

如何从WCF服务获取所有方法?

如何从代码中获取WCF启用Silverlight的服务的所有方法的列表。 我已经添加了Silverlight应用程序的服务引用。 我可以使用Reflection获得所有方法吗? 如果可以请给我举个例子。

从客户端消息检查器访问ClientCredential属性

我可以从客户端消息检查器引用代理客户端实例吗? 原因是,我想访问以下属性的值: ClientCredentials.UserName.UserName ClientCredentials.UserName.Password 谢谢

WCF客户端不遵循UriTemplates合同

我在我的WCF服务的ServiceContract中定义了一个函数,如下所示: [WebInvoke(Method = “GET”, ResponseFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.Bare, UriTemplate = “/test”)] CommandResponse Test(); 另一方面,在客户端应用程序中,我通过visual studio中的“添加服务引用”添加了WCF服务。 使用以下方法调用服务测试函数时: var test = m_ServiceClient.Test(); 我收到一个错误说: Operation ‘GetUser’ of contract… specifies multiple request body parameters to be serialized … GetUser()是我在服务契约中的另一个函数(也是一个GET函数,但在UriTemplate中有参数)。 我的猜测是客户端正在使用它的参数调用函数,但请求是错误的UriTemplate(或者根本没有模板,它只是跳转到某种默认值)。 我必须遵循任何特殊说明让客户了解UriTemplates的function吗? 我一直在搜索,找不到帮助解决这个问题的单页…

如何将多个映像从android发送到WCF Rest服务作为流写入网络驱动器?

经过大量的谷歌搜索和搜索,我设法使用从android到我的WCF服务的multiparsers发送图像,但理想情况下,我想一次发送几个图像,而不是一遍又一遍地调用该方法,因为它需要更长的时间,并添加更多的开销。 这是我目前的代码 Android(取自这里的代码): public static String postFile(Bitmap bitmap, String urlString) throws Exception { HttpClient client = new DefaultHttpClient(); HttpPost post = new HttpPost(urlString); MultipartEntityBuilder builder = MultipartEntityBuilder.create(); builder.setMode(HttpMultipartMode.BROWSER_COMPATIBLE); ByteArrayOutputStream bao = new ByteArrayOutputStream(); bitmap.compress(Bitmap.CompressFormat.PNG, 30, bao); byte[] data = bao.toByteArray(); //filename String fileName = String.format(“File_%d.png”,new Date().getTime()); ByteArrayBody bab = new ByteArrayBody(data, fileName); builder.addPart(“image”, bab); final […]

为什么双值55.68743正在转换为55.6874299999?

我有一个wcf方法,我必须计算纬度经度点之间的距离。 距离计算器方法采用double值作为参数。 所以当我发送纬度值= 55.68743时,.net将其转换为55.6874299999,我的距离错误。 为什么价值在转换? 有谁知道我该怎么解决? 这是一些代码…… public double distance(double lat1, double lon1, double lat2, double lon2) { double theta = lon1 – lon2; double dist = Math.Sin(deg2rad(lat1)) * Math.Sin(deg2rad(lat2)) + Math.Cos(deg2rad(lat1)) * Math.Cos(deg2rad(lat2)) * Math.Cos(deg2rad(theta)); dist = Math.Acos(dist); dist = rad2deg(dist); dist = dist * 60 * 1.1515; dist = dist * 1.609344; return […]

如何有条件地避免在WCF中序列化属性?

是否有可能动态避免序列化的属性? 假设我的WCF服务中有这样的方法: public CompositeType GetDataUsingDataContract(CompositeType composite) { return new CompositeType(); } CompositeType的位置如下所示: [DataContract] public class CompositeType { public bool _flag = true; [DataMember] public decimal? Value { get; set; } } 当我调用GetDataUsingDataContract方法时,我正在返回CompositeType对象,然后通过WCF技术将其序列化为XML。 如果_flag = true,是否可以避免序列化的Value属性? 我读到了[XmlIgnore],[IgnoreDataMember]等,但我明白这将始终忽略序列化的属性,我必须忽略只有flag = true。 如果flag = false,我仍然想序列化这个属性。

配置WCFrestweb.config

这是我的web.config看起来的样子,当我尝试将请求发送到其中一个方法时,我收到错误的请求错误。 我将文件内容作为HTTP POST的参数发送到我的方法。 我用base64编码发送文件。 当参数内容变大时,即对于大文件,我收到错误的请求错误。 我在cs文件中放了断点,我发现该方法根本没有被调用。 可能是什么问题? 我添加了maxStringContentLength值,但仍无用。 我是新手,所以我不太确定web.config文件应该如何包含。 这是我的web.config看起来如何: <!– Configure the WCF REST service base address via the global.asax.cs file and the default endpoint via the attributes on the element below –>