Xamarin Public Jenkins (auto-signing) e46a49ecf1 Imported Upstream version 5.10.0.47
Former-commit-id: d0813289fa2d35e1f8ed77530acb4fb1df441bc0
2018-01-24 17:04:36 +00:00

588 lines
21 KiB
C#

//
// Author:
// Marcos Henrich <marcos.henrich@xamarin.com>
//
// Copyright (c) 2016 Xamarin, Inc.
//
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to deal
// in the Software without restriction, including without limitation the rights
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
// copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in
// all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
// THE SOFTWARE.
#if !FEATURE_NO_BSD_SOCKETS
using System;
using System.Collections.Generic;
using System.Globalization;
using System.Linq;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.ServiceModel.Description;
using System.Threading;
using System.ServiceModel.Channels;
using System.Text;
using NUnit.Framework;
using MonoTests.Helpers;
namespace MonoTests.System.ServiceModel
{
[TestFixture]
public class Bug36080
{
[Test]
public void Bug36080Test ()
{
int port = NetworkHelpers.FindFreePort ();
var url = "http://localhost:" + port + "/HelloWorldService";
TransportBindingElement element = new HttpTransportBindingElement { MaxBufferSize = int.MaxValue, MaxReceivedMessageSize = int.MaxValue };
Binding binding = new CustomBinding(new BindingElement[]
{
new TextMessageEncodingBindingElement (MessageVersion.Default, Encoding.UTF8),
element
});
#if !MOBILE && !XAMMAC_4_5
// Init service
ServiceHost serviceHost = new ServiceHost (typeof (HelloWorldServiceImpl), new Uri (url));
serviceHost.AddServiceEndpoint (typeof (IHelloWorldService), binding, string.Empty);
serviceHost.Open ();
#endif
// In Mobile we still run this tests without any server.
// Issue reported in #36080 was occuring before the connections fails.
var wait = new ManualResetEvent (false);
Exception error = null;
string result = null;
try {
var client = new HelloWorldServiceClient (binding, new EndpointAddress(url));
client.SayHelloToCompleted += delegate (object o, SayHelloToCompletedEventArgs e) {
try {
error = e.Error;
result = e.Error == null ? e.Result : null;
} finally {
wait.Set ();
}
};
var str = "Xamarin";
client.SayHelloToAsync(str);
Assert.IsTrue (wait.WaitOne (TimeSpan.FromSeconds (20)), "timeout");
#if MOBILE || XAMMAC_4_5
if (error.GetType() == typeof(EndpointNotFoundException))
return;
#endif
Assert.IsNull (error, "#1, inner exception: {0}", error);
Assert.AreEqual (str, result, "#2");
} finally {
#if !MOBILE && !XAMMAC_4_5
serviceHost.Close ();
#endif
}
}
}
public class HelloWorldServiceImpl : IHelloWorldService
{
Func<string, string> sayHelloToFunc = SayHelloTo;
static string SayHelloTo (string name)
{
return name;
}
public IAsyncResult BeginSayHelloTo(string name, AsyncCallback callback, object asyncState)
{
return sayHelloToFunc.BeginInvoke (name, callback, asyncState);
}
public string EndSayHelloTo(IAsyncResult result)
{
return sayHelloToFunc.EndInvoke(result);
}
public IAsyncResult BeginGetHelloData(TestXamarin4WCFService.HelloWorldData helloWorldData, AsyncCallback callback, object asyncState)
{
return null;
}
public TestXamarin4WCFService.HelloWorldData EndGetHelloData(IAsyncResult result)
{
return null;
}
}
}
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
// Runtime Version:4.0.30319.18444
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
//
// This code was auto-generated by SlSvcUtil, version 5.0.61118.0
//
namespace TestXamarin4WCFService
{
using System.Runtime.Serialization;
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")]
[System.Runtime.Serialization.DataContractAttribute(Name = "HelloWorldData", Namespace = "http://schemas.datacontract.org/2004/07/TestXamarin4WCFService")]
public partial class HelloWorldData : object
{
private string NameField;
private bool SayHelloField;
[System.Runtime.Serialization.DataMemberAttribute()]
public string Name
{
get
{
return this.NameField;
}
set
{
this.NameField = value;
}
}
[System.Runtime.Serialization.DataMemberAttribute()]
public bool SayHello
{
get
{
return this.SayHelloField;
}
set
{
this.SayHelloField = value;
}
}
}
}
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")]
[System.ServiceModel.ServiceContractAttribute(ConfigurationName="IHelloWorldService")]
public interface IHelloWorldService
{
[System.ServiceModel.OperationContractAttribute(AsyncPattern=true, Action="http://tempuri.org/IHelloWorldService/SayHelloTo", ReplyAction="http://tempuri.org/IHelloWorldService/SayHelloToResponse")]
System.IAsyncResult BeginSayHelloTo(string name, System.AsyncCallback callback, object asyncState);
string EndSayHelloTo(System.IAsyncResult result);
[System.ServiceModel.OperationContractAttribute(AsyncPattern=true, Action="http://tempuri.org/IHelloWorldService/GetHelloData", ReplyAction="http://tempuri.org/IHelloWorldService/GetHelloDataResponse")]
System.IAsyncResult BeginGetHelloData(TestXamarin4WCFService.HelloWorldData helloWorldData, System.AsyncCallback callback, object asyncState);
TestXamarin4WCFService.HelloWorldData EndGetHelloData(System.IAsyncResult result);
}
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")]
public interface IHelloWorldServiceChannel : IHelloWorldService, System.ServiceModel.IClientChannel
{
}
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")]
public partial class SayHelloToCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs
{
private object[] results;
public SayHelloToCompletedEventArgs(object[] results, System.Exception exception, bool cancelled, object userState) :
base(exception, cancelled, userState)
{
this.results = results;
}
public string Result
{
get
{
base.RaiseExceptionIfNecessary();
return ((string)(this.results[0]));
}
}
}
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")]
public partial class GetHelloDataCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs
{
private object[] results;
public GetHelloDataCompletedEventArgs(object[] results, System.Exception exception, bool cancelled, object userState) :
base(exception, cancelled, userState)
{
this.results = results;
}
public TestXamarin4WCFService.HelloWorldData Result
{
get
{
base.RaiseExceptionIfNecessary();
return ((TestXamarin4WCFService.HelloWorldData)(this.results[0]));
}
}
}
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")]
public partial class HelloWorldServiceClient : System.ServiceModel.ClientBase<IHelloWorldService>, IHelloWorldService
{
private BeginOperationDelegate onBeginSayHelloToDelegate;
private EndOperationDelegate onEndSayHelloToDelegate;
private System.Threading.SendOrPostCallback onSayHelloToCompletedDelegate;
private BeginOperationDelegate onBeginGetHelloDataDelegate;
private EndOperationDelegate onEndGetHelloDataDelegate;
private System.Threading.SendOrPostCallback onGetHelloDataCompletedDelegate;
private BeginOperationDelegate onBeginOpenDelegate;
private EndOperationDelegate onEndOpenDelegate;
private System.Threading.SendOrPostCallback onOpenCompletedDelegate;
private BeginOperationDelegate onBeginCloseDelegate;
private EndOperationDelegate onEndCloseDelegate;
private System.Threading.SendOrPostCallback onCloseCompletedDelegate;
public HelloWorldServiceClient()
{
}
public HelloWorldServiceClient(string endpointConfigurationName) :
base(endpointConfigurationName)
{
}
public HelloWorldServiceClient(string endpointConfigurationName, string remoteAddress) :
base(endpointConfigurationName, remoteAddress)
{
}
public HelloWorldServiceClient(string endpointConfigurationName, System.ServiceModel.EndpointAddress remoteAddress) :
base(endpointConfigurationName, remoteAddress)
{
}
public HelloWorldServiceClient(System.ServiceModel.Channels.Binding binding, System.ServiceModel.EndpointAddress remoteAddress) :
base(binding, remoteAddress)
{
}
public System.Net.CookieContainer CookieContainer
{
get
{
System.ServiceModel.Channels.IHttpCookieContainerManager httpCookieContainerManager = this.InnerChannel.GetProperty<System.ServiceModel.Channels.IHttpCookieContainerManager>();
if ((httpCookieContainerManager != null))
{
return httpCookieContainerManager.CookieContainer;
}
else
{
return null;
}
}
set
{
System.ServiceModel.Channels.IHttpCookieContainerManager httpCookieContainerManager = this.InnerChannel.GetProperty<System.ServiceModel.Channels.IHttpCookieContainerManager>();
if ((httpCookieContainerManager != null))
{
httpCookieContainerManager.CookieContainer = value;
}
else
{
throw new System.InvalidOperationException("Unable to set the CookieContainer. Please make sure the binding contains an HttpC" +
"ookieContainerBindingElement.");
}
}
}
public event System.EventHandler<SayHelloToCompletedEventArgs> SayHelloToCompleted;
public event System.EventHandler<GetHelloDataCompletedEventArgs> GetHelloDataCompleted;
public event System.EventHandler<System.ComponentModel.AsyncCompletedEventArgs> OpenCompleted;
public event System.EventHandler<System.ComponentModel.AsyncCompletedEventArgs> CloseCompleted;
[System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)]
System.IAsyncResult IHelloWorldService.BeginSayHelloTo(string name, System.AsyncCallback callback, object asyncState)
{
return base.Channel.BeginSayHelloTo(name, callback, asyncState);
}
[System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)]
string IHelloWorldService.EndSayHelloTo(System.IAsyncResult result)
{
return base.Channel.EndSayHelloTo(result);
}
private System.IAsyncResult OnBeginSayHelloTo(object[] inValues, System.AsyncCallback callback, object asyncState)
{
string name = ((string)(inValues[0]));
return ((IHelloWorldService)(this)).BeginSayHelloTo(name, callback, asyncState);
}
private object[] OnEndSayHelloTo(System.IAsyncResult result)
{
string retVal = ((IHelloWorldService)(this)).EndSayHelloTo(result);
return new object[] {
retVal};
}
private void OnSayHelloToCompleted(object state)
{
if ((this.SayHelloToCompleted != null))
{
InvokeAsyncCompletedEventArgs e = ((InvokeAsyncCompletedEventArgs)(state));
this.SayHelloToCompleted(this, new SayHelloToCompletedEventArgs(e.Results, e.Error, e.Cancelled, e.UserState));
}
}
public void SayHelloToAsync(string name)
{
this.SayHelloToAsync(name, null);
}
public void SayHelloToAsync(string name, object userState)
{
if ((this.onBeginSayHelloToDelegate == null))
{
this.onBeginSayHelloToDelegate = new BeginOperationDelegate(this.OnBeginSayHelloTo);
}
if ((this.onEndSayHelloToDelegate == null))
{
this.onEndSayHelloToDelegate = new EndOperationDelegate(this.OnEndSayHelloTo);
}
if ((this.onSayHelloToCompletedDelegate == null))
{
this.onSayHelloToCompletedDelegate = new System.Threading.SendOrPostCallback(this.OnSayHelloToCompleted);
}
base.InvokeAsync(this.onBeginSayHelloToDelegate, new object[] {
name}, this.onEndSayHelloToDelegate, this.onSayHelloToCompletedDelegate, userState);
}
[System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)]
System.IAsyncResult IHelloWorldService.BeginGetHelloData(TestXamarin4WCFService.HelloWorldData helloWorldData, System.AsyncCallback callback, object asyncState)
{
return base.Channel.BeginGetHelloData(helloWorldData, callback, asyncState);
}
[System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)]
TestXamarin4WCFService.HelloWorldData IHelloWorldService.EndGetHelloData(System.IAsyncResult result)
{
return base.Channel.EndGetHelloData(result);
}
private System.IAsyncResult OnBeginGetHelloData(object[] inValues, System.AsyncCallback callback, object asyncState)
{
TestXamarin4WCFService.HelloWorldData helloWorldData = ((TestXamarin4WCFService.HelloWorldData)(inValues[0]));
return ((IHelloWorldService)(this)).BeginGetHelloData(helloWorldData, callback, asyncState);
}
private object[] OnEndGetHelloData(System.IAsyncResult result)
{
TestXamarin4WCFService.HelloWorldData retVal = ((IHelloWorldService)(this)).EndGetHelloData(result);
return new object[] {
retVal};
}
private void OnGetHelloDataCompleted(object state)
{
if ((this.GetHelloDataCompleted != null))
{
InvokeAsyncCompletedEventArgs e = ((InvokeAsyncCompletedEventArgs)(state));
this.GetHelloDataCompleted(this, new GetHelloDataCompletedEventArgs(e.Results, e.Error, e.Cancelled, e.UserState));
}
}
public void GetHelloDataAsync(TestXamarin4WCFService.HelloWorldData helloWorldData)
{
this.GetHelloDataAsync(helloWorldData, null);
}
public void GetHelloDataAsync(TestXamarin4WCFService.HelloWorldData helloWorldData, object userState)
{
if ((this.onBeginGetHelloDataDelegate == null))
{
this.onBeginGetHelloDataDelegate = new BeginOperationDelegate(this.OnBeginGetHelloData);
}
if ((this.onEndGetHelloDataDelegate == null))
{
this.onEndGetHelloDataDelegate = new EndOperationDelegate(this.OnEndGetHelloData);
}
if ((this.onGetHelloDataCompletedDelegate == null))
{
this.onGetHelloDataCompletedDelegate = new System.Threading.SendOrPostCallback(this.OnGetHelloDataCompleted);
}
base.InvokeAsync(this.onBeginGetHelloDataDelegate, new object[] {
helloWorldData}, this.onEndGetHelloDataDelegate, this.onGetHelloDataCompletedDelegate, userState);
}
private System.IAsyncResult OnBeginOpen(object[] inValues, System.AsyncCallback callback, object asyncState)
{
return ((System.ServiceModel.ICommunicationObject)(this)).BeginOpen(callback, asyncState);
}
private object[] OnEndOpen(System.IAsyncResult result)
{
((System.ServiceModel.ICommunicationObject)(this)).EndOpen(result);
return null;
}
private void OnOpenCompleted(object state)
{
if ((this.OpenCompleted != null))
{
InvokeAsyncCompletedEventArgs e = ((InvokeAsyncCompletedEventArgs)(state));
this.OpenCompleted(this, new System.ComponentModel.AsyncCompletedEventArgs(e.Error, e.Cancelled, e.UserState));
}
}
public void OpenAsync()
{
this.OpenAsync(null);
}
public void OpenAsync(object userState)
{
if ((this.onBeginOpenDelegate == null))
{
this.onBeginOpenDelegate = new BeginOperationDelegate(this.OnBeginOpen);
}
if ((this.onEndOpenDelegate == null))
{
this.onEndOpenDelegate = new EndOperationDelegate(this.OnEndOpen);
}
if ((this.onOpenCompletedDelegate == null))
{
this.onOpenCompletedDelegate = new System.Threading.SendOrPostCallback(this.OnOpenCompleted);
}
base.InvokeAsync(this.onBeginOpenDelegate, null, this.onEndOpenDelegate, this.onOpenCompletedDelegate, userState);
}
private System.IAsyncResult OnBeginClose(object[] inValues, System.AsyncCallback callback, object asyncState)
{
return ((System.ServiceModel.ICommunicationObject)(this)).BeginClose(callback, asyncState);
}
private object[] OnEndClose(System.IAsyncResult result)
{
((System.ServiceModel.ICommunicationObject)(this)).EndClose(result);
return null;
}
private void OnCloseCompleted(object state)
{
if ((this.CloseCompleted != null))
{
InvokeAsyncCompletedEventArgs e = ((InvokeAsyncCompletedEventArgs)(state));
this.CloseCompleted(this, new System.ComponentModel.AsyncCompletedEventArgs(e.Error, e.Cancelled, e.UserState));
}
}
public void CloseAsync()
{
this.CloseAsync(null);
}
public void CloseAsync(object userState)
{
if ((this.onBeginCloseDelegate == null))
{
this.onBeginCloseDelegate = new BeginOperationDelegate(this.OnBeginClose);
}
if ((this.onEndCloseDelegate == null))
{
this.onEndCloseDelegate = new EndOperationDelegate(this.OnEndClose);
}
if ((this.onCloseCompletedDelegate == null))
{
this.onCloseCompletedDelegate = new System.Threading.SendOrPostCallback(this.OnCloseCompleted);
}
base.InvokeAsync(this.onBeginCloseDelegate, null, this.onEndCloseDelegate, this.onCloseCompletedDelegate, userState);
}
protected override IHelloWorldService CreateChannel()
{
return new HelloWorldServiceClientChannel(this);
}
private class HelloWorldServiceClientChannel : ChannelBase<IHelloWorldService>, IHelloWorldService
{
public HelloWorldServiceClientChannel(System.ServiceModel.ClientBase<IHelloWorldService> client) :
base(client)
{
}
public System.IAsyncResult BeginSayHelloTo(string name, System.AsyncCallback callback, object asyncState)
{
object[] _args = new object[1];
_args[0] = name;
System.IAsyncResult _result = base.BeginInvoke("SayHelloTo", _args, callback, asyncState);
return _result;
}
public string EndSayHelloTo(System.IAsyncResult result)
{
object[] _args = new object[0];
string _result = ((string)(base.EndInvoke("SayHelloTo", _args, result)));
return _result;
}
public System.IAsyncResult BeginGetHelloData(TestXamarin4WCFService.HelloWorldData helloWorldData, System.AsyncCallback callback, object asyncState)
{
object[] _args = new object[1];
_args[0] = helloWorldData;
System.IAsyncResult _result = base.BeginInvoke("GetHelloData", _args, callback, asyncState);
return _result;
}
public TestXamarin4WCFService.HelloWorldData EndGetHelloData(System.IAsyncResult result)
{
object[] _args = new object[0];
TestXamarin4WCFService.HelloWorldData _result = ((TestXamarin4WCFService.HelloWorldData)(base.EndInvoke("GetHelloData", _args, result)));
return _result;
}
}
}
#endif