我已经读过一些关于它的东西,但我有点困惑,所以我想知道我做了什么。
我在netcore 2.0中创建了一个WEBAPI,我必须使用一个外部WCF(框架4.5),我做了一个非常简单的测试,因为我创建了一个WCF,我可以在WEBAPI中添加服务引用并消耗掉它。所以这个例子运行正常
public async Task<WCFMySevrice.CompositeType> IndexTest2(WCFMySevrice.CompositeType value)
{
//Creating Client object of Service Reference
WCFMySevrice.MyServiceClient client = new WCFMySevrice.MyServiceClient();
//Call the method from WCF Service
WCFMySevrice.CompositeType result = await client.GetDataUsingDataContractAsync(value);
return result;
}
我的问题是,目前我的WCF的网址是“http://localhost:55203/MyService.svc”,但如果我想在生产环境中部署我的应用程序,URL将会改变,有没有办法配置端点?我已经阅读过它,但我知道这是不可能的,我需要创建一个带有“WCF svcutil工具概述”的代理类,但对我来说并不清楚。如果我使用它,我不再需要服务参考吗?
任何建议都会有所帮助。
当您在visual studio中发布wcf服务时,服务元数据地址由两部分组成。 IIS将提供以下表单。
地址的其余部分由配置组成。 “/数据”
<system.serviceModel>
<services>
<service name="WcfService1.Service1" behaviorConfiguration="mybehavior">
<endpoint address="Data" binding="wsHttpBinding" contract="WcfService1.IService1" bindingConfiguration="http"></endpoint>
<endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"></endpoint>
</service>
</services>
<bindings>
<wsHttpBinding>
上面的服务地址是
然后我们通过Microsoft WCF Web服务引用提供程序生成客户端代理类。 也就是说,我们可以通过配置文件指定服务端点地址。 如果有什么我可以帮忙,请随时告诉我。
亚伯拉罕钱谢谢你的帮助。由于网络核心对我来说是新的,我感到困惑,因为在我只改变web.config中的端点之前,我认为我没有完全清楚这个概念,但我做了什么工作
看,我这样做了:
{ "WCFMyService": { "EndpointUrl": "http://localhost:55203/MyService.svc" } }
public void ConfigureServices(IServiceCollection services) { services.Configure<MyServiceOptions>(Configuration.GetSection("WCFMyService")); services.AddMvc() .AddXmlSerializerFormatters() .AddXmlDataContractSerializerFormatters(); }
namespace APITest_CallWCF.Controllers { using Microsoft.AspNetCore.Mvc; using Microsoft.Extensions.Options; using System.Collections.Generic; using System.ServiceModel; using System.Threading.Tasks; [Route("api/[controller]")] public class ValuesController : Controller { private readonly IOptions<MyServiceOptions> myOptions; public ValuesController(IOptions<MyServiceOptions> options) { this.myOptions = options; } // GET api/values [HttpGet] public IEnumerable<string> Get() { return new string[] { "value1", "value2" }; } // POST api/values [HttpPost] public void Post([FromBody]WCFMySevrice.CompositeType value) { if (ModelState.IsValid) { IndexText3(value); } } public async Task<WCFMySevrice.CompositeType> IndexText3(WCFMySevrice.CompositeType value) { BasicHttpBinding basicHttpBinding = new BasicHttpBinding(); EndpointAddress endpointAddress = new EndpointAddress(myOptions.Value.EndpointUrl); WCFMySevrice.MyServiceClient wcfClient = new WCFMySevrice.MyServiceClient(basicHttpBinding, endpointAddress); //Call the method from WCF Service WCFMySevrice.CompositeType result = await wcfClient.GetDataUsingDataContractAsync(value); return result; } } }