字符串

时间:2018-02-13 19:45:35

标签: c# wcf

调用WCF服务时,字符串似乎存在参数限制。

WCF服务中有多种方法,大多数大数据都传递给具有byte[]参数的方法。但我确实有一个可以收到非常大的字符串。由于某种原因,它似乎阻止在26-28 MB左右。我收到以下错误,但我知道这是一个错误的错误:

  

没有终点收听   http://example.com/service/DataLayer.svc可以接受   信息。这通常是由错误的地址或SOAP操作引起的。   有关详细信息,请参阅InnerException(如果存在)。"

内部错误仅返回以下内容:

  

远程服务器返回错误:(404)Not Found。

我对整个服务和客户的设置是相同的,并且最大化:

客户端

binding = new BasicHttpBinding();
binding.CloseTimeout = new TimeSpan(0, 1, 30);
binding.OpenTimeout = new TimeSpan(0, 1, 30);
binding.ReceiveTimeout = new TimeSpan(0, 1, 30);
binding.SendTimeout = new TimeSpan(0, 1, 30);
binding.MaxReceivedMessageSize = 100000000;
binding.ReaderQuotas.MaxDepth = 2147483647;
binding.ReaderQuotas.MaxStringContentLength = 2147483647;
binding.ReaderQuotas.MaxArrayLength = 2147483647;
binding.ReaderQuotas.MaxBytesPerRead = 2147483647;
binding.ReaderQuotas.MaxNameTableCharCount = 2147483647;

服务器

<basicHttpBinding>
  <binding maxBufferPoolSize="2147483647" maxBufferSize="2147483647" maxReceivedMessageSize="2147483647">
    <readerQuotas maxDepth="2147483647" maxStringContentLength="2147483647" maxArrayLength="2147483647" maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647" />
  </binding>
</basicHttpBinding>

我可以调用一个byte[]参数的方法,该参数的大小(保存到磁盘)超过300 mb并且可以正常工作。此外,有趣的是,有一种方法,我传递一个整数,返回我尝试发送到WCF的字符串。

所以我进入服务器并手动创建一个40 MB的文件,然后调用该方法并传递正确的int,以便它返回正确的文件字符串,文件为40 MB,它就像一个魅力。

此服务自2014年以来一直在同一服务器上运行,没有任何问题,我们最近开始向该特定方法发送更大的字符串,并开始抛出错误。

我已将WCF service中的代码复制到exe应用程序中并且代码正常工作。因此,由于两个结束代码都有效,我的赌注是从exe转移到wcf。服务器还剩下680 GB的空间,所以我也是绿色。

这里有我从网络服务中获得的代码

[ServiceContract]
public interface IDataLayer
{
    [OperationContract]
    void SaveText(string text, int id);
}
public class DataLayer : IDataLayer
{
        public void SaveText(string text, int id)
        {
            File.WriteAllText(@"C:\Data\" + id.ToString() + ".txt", text);
        }
 }

编辑:我尝试将所有内容都带到本地。所以我在WCF Service本地运行了Visual Studio并将我的客户端附加到那个客户端。

我在服务端的SaveText方法中设置了一个断点,我使用一个40 MB的字符串从客户端调用该方法。错误仍然在客户端中弹出,并且永远不会到达服务服务中的断点。所以问题出在方法调用和它到达服务之前。我尝试使用一个5 MB的字符串来断点。

我尝试了一个159 MB的byte [],并在服务SaveByte(byte[] data, int id)中调用了第二个方法,它所做的就是保存到数据库并且断点命中。所以问题实际上与字符串有关,不能超过一定数量。

有没有办法在Microsoft底层代码中逐行进行,并在调用WCF服务方法时遵循每种方法,直到它实际发送到服务器?就像我能找到真正的错误一样。

修改的 我有多个案例,我需要多个string作为具有巨大规模的参数传递。重复标记是错误的,因为它仅用于文件,但我正在寻找string不是文件的解决方案。文件已经使用byte[]个参数。

0 个答案:

没有答案