English 中文(简体)
a. 通过一大阵列,以提供全球合作框架服务
原标题:Passing a large array to a WCF service
  • 时间:2012-01-12 10:01:41
  •  标签:
  • c#
  • wcf

我需要把一大批人纳入到世界合作框架的服务中。

当我试图这样做时,我会发现通信外观:

The socket connection was aborted. This could be caused by an error processing
your message or a receive timeout being exceeded by the remote host, or an 
underlying network resource issue. Local socket timeout was  24.00:59:59.9649980 .

我如何确定这一点?

守则:

服务器:

[ServiceContract(CallbackContract = typeof(ICallback))]
        public interface IService
        {
            [OperationContract]
            string Ping(string name);

            [OperationContract]
            int Count(string[] data);
        }

        public interface ICallback
        {
            [OperationContract]
            void OnPing(string pingText, DateTime time);
        }

        [ServiceBehavior(InstanceContextMode = InstanceContextMode.PerCall)]
        class ServiceImplementation : IService
        {
            #region IService Members

            public string Ping(string name)
            {
                Semaphore wait = new Semaphore(0,1);
                //get the callback item
                var callback = OperationContext.Current.GetCallbackChannel<ICallback>();
                if (callback!=null)
                {
                    new Thread(() =>
                    {
                        wait.WaitOne();
                        callback.OnPing(name, DateTime.Now);
                    }).Start();
                }                

                Console.WriteLine("SERVER - Processing Ping( {0} )", name);
                wait.Release();
                return "Hello, " + name;


            }

            #endregion



            public int Count(string[] data)
            {
                return data.Count();
            }
        }



        private static System.Threading.AutoResetEvent stopFlag = new System.Threading.AutoResetEvent(false);   

        public static void Main()
        {
            ServiceHost svh = new ServiceHost(typeof(ServiceImplementation));
            svh.AddServiceEndpoint(typeof(IService), new NetTcpBinding(),  "net.tcp://localhost:8000");

            // Check to see if the service host already has a ServiceMetadataBehavior
            ServiceMetadataBehavior smb = svh.Description.Behaviors.Find<ServiceMetadataBehavior>();
            // If not, add one
            if (smb == null)
                smb = new ServiceMetadataBehavior();
            //smb.HttpGetEnabled = true;
            smb.MetadataExporter.PolicyVersion = PolicyVersion.Policy15;
            svh.Description.Behaviors.Add(smb);

            // Add MEX endpoint
            svh.AddServiceEndpoint(
              ServiceMetadataBehavior.MexContractName,
              MetadataExchangeBindings.CreateMexTcpBinding(),
              "net.tcp://localhost:8000/mex"
            );

            svh.Open();   

            Console.WriteLine("SERVER - Running...");
            stopFlag.WaitOne();


            Console.WriteLine("SERVER - Shutting down...");
            svh.Close();   

            Console.WriteLine("SERVER - Shut down!");

        }



        public static void Stop()
        {
            stopFlag.Set();
        }


client:

        class Callback : IServiceCallback
        {
            static int s;
            int id = 0;
            public Callback()
            {
                id = s++;
            }
            public void OnPing(string pingText, DateTime time)
            {
                Console.WriteLine("
{2}:Callback on "{0}"	{1}",pingText,time,id);
            }
        }

        static Random rnd = new Random();

        static string GenetateStuff(int length)
        {
            StringBuilder sb = new StringBuilder();
            string s = " ,.pyfgcrlaoeuidhtns;qjkxbmwvsz";
            for (int i = 0; i < length; i++)
            {
                sb.Append(s[rnd.Next(s.Length)]);
            }
            return sb.ToString();
        }

        static void Main(string[] args)
        {           

            InstanceContext ctx = new InstanceContext(new Callback());

             ServiceClient client = new ServiceClient(ctx);


             List<string> data = new List<string>();
            for (int i = 0; i < 10000; i++)
             {
                 data.Add(GenetateStuff(10000));
             }
            Console.WriteLine(client.Count(data.ToArray()));
        }

client xml:

    <?xml version="1.0" encoding="utf-8" ?>
    <configuration>
        <system.serviceModel>
            <bindings>
                <netTcpBinding>
                    <binding name="NetTcpBinding_IService" closeTimeout="24:01:00"
                        openTimeout="24:01:00" receiveTimeout="24:10:00" sendTimeout="24:01:00"
                        transactionFlow="false" transferMode="Buffered" transactionProtocol="OleTransactions"
                        hostNameComparisonMode="StrongWildcard" listenBacklog="10"
                        maxBufferPoolSize="524288" maxBufferSize="65536" maxConnections="10"
                        maxReceivedMessageSize="65536">
                        <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384"
                            maxBytesPerRead="4096" maxNameTableCharCount="16384" />
                        <reliableSession ordered="true" inactivityTimeout="00:10:00"
                            enabled="false" />
                        <security mode="Transport">
                            <transport clientCredentialType="Windows" protectionLevel="EncryptAndSign" />
                            <message clientCredentialType="Windows" />
                        </security>
                    </binding>
                </netTcpBinding>
            </bindings>
            <client>
                <endpoint address="net.tcp://localhost:8000/" binding="netTcpBinding"
                    bindingConfiguration="NetTcpBinding_IService" contract="TestTcpService.IService"
                    name="NetTcpBinding_IService">
                    <identity>
                        <userPrincipalName value="badasscomputingmenkaur" />
                    </identity>
                </endpoint>
            </client>
        </system.serviceModel>
    </configuration>

全部项目可下载http://iathao.com/tmp/tcptation.zip”rel=“nofollow”>。

最佳回答

替换如下行文:

    svh.AddServiceEndpoint(typeof(IService), new NetTcpBinding(),  "net.tcp://localhost:8000");

iii

var tcpbinding = new NetTcpBinding();
            tcpbinding.MaxReceivedMessageSize = 2147483647;
            tcpbinding.ReaderQuotas.MaxArrayLength = 2147483647;
            tcpbinding.ReaderQuotas.MaxBytesPerRead = 2147483647;
            tcpbinding.ReaderQuotas.MaxStringContentLength = 2147483647;
            tcpbinding.ReaderQuotas.MaxDepth = 2147483647;
            svh.AddServiceEndpoint(typeof(IService), tcpbinding,  "net.tcp://localhost:8000");

NOTE: Reference System.Runtime.Serialization.dll and import the namespace

这应当增加所有缺省限制,并且应当予以罚款。 同样,也找到了通过法典添加最高分级的方法。

问题回答

暂无回答




相关问题
Anyone feel like passing it forward?

I m the only developer in my company, and am getting along well as an autodidact, but I know I m missing out on the education one gets from working with and having code reviewed by more senior devs. ...

NSArray s, Primitive types and Boxing Oh My!

I m pretty new to the Objective-C world and I have a long history with .net/C# so naturally I m inclined to use my C# wits. Now here s the question: I feel really inclined to create some type of ...

C# Marshal / Pinvoke CBitmap?

I cannot figure out how to marshal a C++ CBitmap to a C# Bitmap or Image class. My import looks like this: [DllImport(@"test.dll", CharSet = CharSet.Unicode)] public static extern IntPtr ...

How to Use Ghostscript DLL to convert PDF to PDF/A

How to user GhostScript DLL to convert PDF to PDF/A. I know I kind of have to call the exported function of gsdll32.dll whose name is gsapi_init_with_args, but how do i pass the right arguments? BTW, ...

Linqy no matchy

Maybe it s something I m doing wrong. I m just learning Linq because I m bored. And so far so good. I made a little program and it basically just outputs all matches (foreach) into a label control. ...

热门标签