[Mono-dev] WCF in Mono 2.6.7
Atsushi Eno
atsushieno at veritas-vos-liberabit.com
Mon Jan 17 02:16:44 EST 2011
You might want to read this:
http://nirajrules.wordpress.com/2009/08/03/mtom-vs-streaming-vs-compression-%E2%80%93-large-attachments-over-wcf/
Atsushi Eno
(2011/01/15 22:19), Joel Caner wrote:
> Thank you for your reply. Can you tell me if there is another way to send
> large data/file then?..can you provide an example of a client and service?
>
> Thank you again for your time.
>
> Cheers,
>
> -----Original Message-----
> From: Atsushi Eno [mailto:atsushieno at veritas-vos-liberabit.com]
> Sent: Saturday, January 15, 2011 3:11 AM
> To: joelcaner
> Cc: mono-devel-list at lists.ximian.com
> Subject: Re: [Mono-dev] WCF in Mono 2.6.7
>
> Not sure where the actual error occurs without stack trace, but 2.6 is
> too old
> for WCF to try anyways.
> And Mtom is almost untested so it will cause any kind of problem (never
> expected that there are actually people who use it).
>
> Atsushi Eno
>
> (2011/01/14 23:37), joelcaner wrote:
>> I am having trouble getting WCF working on Mono in Suse Linux 11.3
>> I have the client as follow:
>> BasicHttpBinding binding = new BasicHttpBinding();
>> binding.Security.Mode = BasicHttpSecurityMode.None;
>> binding.TransferMode = TransferMode.Streamed;
>> binding.MessageEncoding = WSMessageEncoding.Mtom;
>> binding.MaxReceivedMessageSize = int.MaxValue;
>>
>> EndpointAddress address = new
>> EndpointAddress("http://localhost:5800/DataUploader");
>> ChannelFactory<IDataUploader> channel = new
>> ChannelFactory<IDataUploader>(binding, address);
>>
>> IDataUploader uploader = channel.CreateChannel();
>>
>> try
>> {
>>
>>
>> uploader.Upload(File.Open(@"G:\anthem-1.5.2.zip",
>> FileMode.Open, FileAccess.Read));
>> Console.WriteLine("File uploaded to the server");
>> Console.ReadLine();
>> }
>> catch (Exception ex)
>> {
>> Console.Write(ex.Message);
>> Console.ReadLine();
>> }
>> finally
>> {
>> ((IClientChannel)uploader).Close();
>>
>>
>> }
>>
>> I have the following interface:
>> [ServiceContract]
>> interface IDataUploader
>> {
>> [OperationContract]
>> void Upload(Stream data);
>> }
>>
>> Now the service is as follow on DataUploader.cs:
>> class DataUploader : IDataUploader
>>
>> {
>>
>> #region IDataUploader Members
>>
>> public void Upload(Stream data)
>>
>> {
>>
>> string xmlFile = @"c:\temp\uploadedfile" + ".zip";
>>
>>
>>
>> using (FileStream fs = new FileStream(xmlFile,
> FileMode.Create))
>> {
>>
>> int bufferSize = 1 * 1024 * 1024; // 1MB buffer
>>
>> byte[] buffer = new byte[bufferSize];
>>
>> int bytes;
>>
>>
>>
>> while ((bytes = data.Read(buffer, 0, bufferSize))> 0)
>>
>> {
>>
>> fs.Write(buffer, 0, bytes);
>>
>> fs.Flush();
>>
>> }
>>
>> }
>>
>>
>>
>>
>>
>> }
>>
>> #endregion
>>
>>
>>
>>
>>
>> }
>>
>> Now on IDataUploader.cs:
>> [ServiceContract]
>>
>> interface IDataUploader
>>
>> {
>>
>> [OperationContract]
>>
>> void Upload(Stream data);
>>
>> }
>>
>> On the main.cs I have:
>> public static void Main (string[] args)
>>
>> {
>>
>> ServiceHost host = new
> ServiceHost(typeof(DataUploader));
>>
>>
>> BasicHttpBinding binding = new BasicHttpBinding();
>>
>> binding.Security.Mode = BasicHttpSecurityMode.None;
>>
>> binding.TransferMode = TransferMode.Streamed;
>>
>> binding.MessageEncoding = WSMessageEncoding.Mtom;
>>
>> binding.MaxReceivedMessageSize = int.MaxValue;
>>
>>
>>
>>
>>
>> host.AddServiceEndpoint(typeof(IDataUploader), binding, new
>> Uri("http://localhost:5800/DataUploader"));
>>
>>
>>
>> ServiceBehaviorAttribute attribute =
>>
> (ServiceBehaviorAttribute)host.Description.Behaviors[typeof(ServiceBehaviorA
> ttribute)];
>> attribute.ConcurrencyMode = ConcurrencyMode.Multiple;
>>
>> attribute.InstanceContextMode = InstanceContextMode.Single;
>>
>> attribute.IncludeExceptionDetailInFaults = true;
>>
>>
>>
>> ServiceThrottlingBehavior throttling = new
>> ServiceThrottlingBehavior();
>>
>> throttling.MaxConcurrentSessions = 24;
>>
>> throttling.MaxConcurrentCalls = 24;
>>
>>
>>
>> host.Description.Behaviors.Add(throttling);
>>
>>
>>
>> host.Open();
>>
>>
>>
>> Console.WriteLine("Service Hosted ...");
>>
>> Console.ReadKey();
>>
>> host.Close();
>>
>> }
>> I have both client and service running on the same system. I get an error:
>> Object reference not set to an instance of an object error. When I run a
>> client on a windows system and the service on the linux system I get "bad
>> request(400) error. Can someone help me understand what I am missing?
>
>
More information about the Mono-devel-list
mailing list