Je mets se poste car j'aurais besoin d'un petit coup main, j'utilise maintenant la version d'Unity 2018.1.0b4 qui permet d'être sous .Net 4.6 (expérimental) donc grâce à cela j'arrive à incorporer mon service WCF à mon jeu Unity mais avant cela j'avais un problème qui était la fonction Threading.Task qui a été résolu au passage de .Net 4.6 (expérimental) mais maintenant quand j'appelle mon service WCF j'obtiens une nouvelle erreur que même en cherchent sur le internet, je n'ai pas vraiment trouvé de solution correcte.
Erreur :
Code : Tout sélectionner
InvalidOperationException: Client endpoint configuration '*' was not found in 0 endpoints.
System.ServiceModel.ChannelFactory.ApplyConfiguration (System.String configurationName) (at <dbc4e1c0f46a48ada75c3dc308d69d1b>:0)
System.ServiceModel.ChannelFactory.InitializeEndpoint (System.String configurationName, System.ServiceModel.EndpointAddress address) (at <dbc4e1c0f46a48ada75c3dc308d69d1b>:0)
System.ServiceModel.ChannelFactory`1[TChannel]..ctor (System.String endpointConfigurationName, System.ServiceModel.EndpointAddress remoteAddress) (at <dbc4e1c0f46a48ada75c3dc308d69d1b>:0)
System.ServiceModel.ClientBase`1[TChannel].Initialize (System.ServiceModel.InstanceContext instance, System.String endpointConfigurationName, System.ServiceModel.EndpointAddress remoteAddress) (at <dbc4e1c0f46a48ada75c3dc308d69d1b>:0)
System.ServiceModel.ClientBase`1[TChannel]..ctor (System.ServiceModel.InstanceContext callbackInstance, System.String endpointConfigurationName) (at <dbc4e1c0f46a48ada75c3dc308d69d1b>:0)
System.ServiceModel.ClientBase`1[TChannel]..ctor (System.ServiceModel.InstanceContext callbackInstance) (at <dbc4e1c0f46a48ada75c3dc308d69d1b>:0)
System.ServiceModel.ClientBase`1[TChannel]..ctor () (at <dbc4e1c0f46a48ada75c3dc308d69d1b>:0)
Service1Client..ctor () (at Assets/ClientProxies/Service1.cs:100)
utilisationWCF.Price () (at Assets/Script/utilisationWCF.cs:14)
UnityEngine.Events.InvokableCall.Invoke () (at C:/buildslave/unity/build/Runtime/Export/UnityEvent.cs:166)
UnityEngine.Events.UnityEvent.Invoke () (at C:/buildslave/unity/build/Runtime/Export/UnityEvent_0.cs:58)
UnityEngine.UI.Button.Press () (at C:/buildslave/unity/build/Extensions/guisystem/UnityEngine.UI/UI/Core/Button.cs:36)
UnityEngine.UI.Button.OnPointerClick (UnityEngine.EventSystems.PointerEventData eventData) (at C:/buildslave/unity/build/Extensions/guisystem/UnityEngine.UI/UI/Core/Button.cs:45)
UnityEngine.EventSystems.ExecuteEvents.Execute (UnityEngine.EventSystems.IPointerClickHandler handler, UnityEngine.EventSystems.BaseEventData eventData) (at C:/buildslave/unity/build/Extensions/guisystem/UnityEngine.UI/EventSystem/ExecuteEvents.cs:50)
UnityEngine.EventSystems.ExecuteEvents.Execute[T] (UnityEngine.GameObject target, UnityEngine.EventSystems.BaseEventData eventData, UnityEngine.EventSystems.ExecuteEvents+EventFunction`1[T1] functor) (at C:/buildslave/unity/build/Extensions/guisystem/UnityEngine.UI/EventSystem/ExecuteEvents.cs:261)
UnityEngine.EventSystems.EventSystem:Update()
Script Service WCF (PS: il comporte une erreur : Nom de type 'OperationContractAttributeAttribute' introuvable dans l'éspace de noms 'System.ServiceModel'. Ce type à été transmis à l'assembly 'System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'. Ajoutez une référence à cet assembly.) Elle se trouve au milieu du script quand ça utilise
[System.ServiceModel...]
Code : Tout sélectionner
//------------------------------------------------------------------------------
// <auto-generated>
// Ce code a été généré par un outil.
// Version du runtime :4.0.30319.42000
//
// Les modifications apportées à ce fichier peuvent provoquer un comportement incorrect et seront perdues si
// le code est régénéré.
// </auto-generated>
//------------------------------------------------------------------------------
namespace WcfService1
{
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")]
[System.Runtime.Serialization.DataContractAttribute(Name="CompositeType", Namespace="http://schemas.datacontract.org/2004/07/WcfService1")]
public partial class CompositeType : object, System.Runtime.Serialization.IExtensibleDataObject
{
private System.Runtime.Serialization.ExtensionDataObject extensionDataField;
private bool BoolValueField;
private string StringValueField;
public System.Runtime.Serialization.ExtensionDataObject ExtensionData
{
get
{
return this.extensionDataField;
}
set
{
this.extensionDataField = value;
}
}
[System.Runtime.Serialization.DataMemberAttribute()]
public bool BoolValue
{
get
{
return this.BoolValueField;
}
set
{
this.BoolValueField = value;
}
}
[System.Runtime.Serialization.DataMemberAttribute()]
public string StringValue
{
get
{
return this.StringValueField;
}
set
{
this.StringValueField = value;
}
}
}
}
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")]
[System.ServiceModel.ServiceContractAttribute(ConfigurationName="IService1")]
public interface IService1
{
[System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IService1/GetPrice", ReplyAction="http://tempuri.org/IService1/GetPriceResponse")]
float GetPrice(string id);
[System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IService1/GetPrice", ReplyAction="http://tempuri.org/IService1/GetPriceResponse")]
System.Threading.Tasks.Task<float> GetPriceAsync(string id);
[System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IService1/GetData", ReplyAction="http://tempuri.org/IService1/GetDataResponse")]
string GetData(int value);
[System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IService1/GetData", ReplyAction="http://tempuri.org/IService1/GetDataResponse")]
System.Threading.Tasks.Task<string> GetDataAsync(int value);
[System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IService1/GetDataUsingDataContract", ReplyAction="http://tempuri.org/IService1/GetDataUsingDataContractResponse")]
WcfService1.CompositeType GetDataUsingDataContract(WcfService1.CompositeType composite);
[System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IService1/GetDataUsingDataContract", ReplyAction="http://tempuri.org/IService1/GetDataUsingDataContractResponse")]
System.Threading.Tasks.Task<WcfService1.CompositeType> GetDataUsingDataContractAsync(WcfService1.CompositeType composite);
}
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")]
public interface IService1Channel : IService1, System.ServiceModel.IClientChannel
{
}
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")]
public partial class Service1Client : System.ServiceModel.ClientBase<IService1>, IService1
{
public Service1Client()
{
}
public Service1Client(string endpointConfigurationName) :
base(endpointConfigurationName)
{
}
public Service1Client(string endpointConfigurationName, string remoteAddress) :
base(endpointConfigurationName, remoteAddress)
{
}
public Service1Client(string endpointConfigurationName, System.ServiceModel.EndpointAddress remoteAddress) :
base(endpointConfigurationName, remoteAddress)
{
}
public Service1Client(System.ServiceModel.Channels.Binding binding, System.ServiceModel.EndpointAddress remoteAddress) :
base(binding, remoteAddress)
{
}
public float GetPrice(string id)
{
return base.Channel.GetPrice(id);
}
public System.Threading.Tasks.Task<float> GetPriceAsync(string id)
{
return base.Channel.GetPriceAsync(id);
}
public string GetData(int value)
{
return base.Channel.GetData(value);
}
public System.Threading.Tasks.Task<string> GetDataAsync(int value)
{
return base.Channel.GetDataAsync(value);
}
public WcfService1.CompositeType GetDataUsingDataContract(WcfService1.CompositeType composite)
{
return base.Channel.GetDataUsingDataContract(composite);
}
public System.Threading.Tasks.Task<WcfService1.CompositeType> GetDataUsingDataContractAsync(WcfService1.CompositeType composite)
{
return base.Channel.GetDataUsingDataContractAsync(composite);
}
}
Code : Tout sélectionner
using System;
using System.Threading.Tasks;
using UnityEngine;
using UnityEngine.UI;
using WcfService1;
public class utilisationWCF : MonoBehaviour
{
public InputField question;
public Text reponse;
public void Price()
{
Service1Client client = new Service1Client();
Task.Run(() => MaMethodeAsynchroneAsync(question.text, client));
}
private async Task MaMethodeAsynchroneAsync(string input, Service1Client client)
{
Debug.Log($"Prix de l'objet {input} : {await client.GetPriceAsync(input)}");
}
}
Code : Tout sélectionner
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6" />
</startup>
<system.serviceModel>
<bindings>
<basicHttpBinding>
<binding name="BasicHttpBinding_IService1" />
</basicHttpBinding>
</bindings>
<client>
<endpoint address="http://127.0.0.1/Service1.svc" binding="basicHttpBinding"
bindingConfiguration="BasicHttpBinding_IService1" contract="ServiceReference1.IService1"
name="BasicHttpBinding_IService1" />
</client>
</system.serviceModel>
</configuration>