WCF Rest服务引用另一个承载WCF服务的应用程序.找不到默认终结点
本文关键字:服务 WCF 找不到 默认 结点 应用程序 Rest 引用 另一个 | 更新日期: 2023-09-27 18:21:38
我的背景如下:我有一个WCF REST服务,它是消费者将与之通信的主要服务。
我有一个辅助应用程序托管的WCF服务(不是基于REST的),它公开了一些方法。第二个是必要的,因为我需要基于REST的服务,以便能够调用32位非托管库。
现在。。。我创建了我的自托管服务(这为我封装了对32位库的几个调用),如下所示:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.ServiceModel;
using System.ServiceModel.Description;
using System.Drawing;
namespace SelfHost
{
class Program
{
static void Main(string[] args)
{
Uri baseAddress = new Uri("http://localhost:8080/BlahImageWarp");
Uri mexUri = new Uri("http://localhost:8080/BlahImageWarp/mex");
// Create the ServiceHost.
using (ServiceHost host = new ServiceHost(typeof(BlahImageWarpService), baseAddress))
{
ServiceMetadataBehavior smb = new ServiceMetadataBehavior();
smb.HttpGetUrl = mexUri;
smb.HttpGetEnabled = true;
smb.MetadataExporter.PolicyVersion = PolicyVersion.Policy15;
host.Description.Behaviors.Add(smb);
host.AddServiceEndpoint(ServiceMetadataBehavior.MexContractName, MetadataExchangeBindings.CreateMexHttpBinding(), "mex");
BasicHttpBinding binding = new BasicHttpBinding();
binding.MaxReceivedMessageSize = int.MaxValue;
binding.Security.Mode = BasicHttpSecurityMode.None;
host.AddServiceEndpoint(typeof(IBlahImageWarpService), binding, "");
// Enable metadata publishing.
var behavior = host.Description.Behaviors.Find<ServiceDebugBehavior>();
behavior.IncludeExceptionDetailInFaults = true;
host.Open();
Console.WriteLine("The service is ready at {0}", baseAddress);
Console.WriteLine("Press <Enter> to stop the service.");
Console.ReadLine();
// Close the ServiceHost.
host.Close();
}
}
}
[ServiceContract]
public interface IBlahImageWarpService
{
[OperationContract]
string WarpImageJSON(string JSONString);
[OperationContract]
string BitmapToBase64(Bitmap bmp);
}
public class BlahImageWarpService : IBlahImageWarpService
{
/// <summary>
/// warps the image
/// </summary>
/// <param name="JSONString">JSON of a BlahImgObject</param>
/// <returns>returns base64Encoded warped image</returns>
public string WarpImageJSON(string JSONString)
{
// this would be the call on the service
BlahImageConverter conv = new BlahImageConverter(JSONString);
var base64WarpedImage = conv.Warp();
return base64WarpedImage;
}
public string BitmapToBase64(Bitmap bmp)
{
return BlahImageConverter.BitmapToBase64(bmp);
}
}
}
我运行此服务,然后转到VS2013 for web中的REST服务项目。
我添加了对此正在运行的服务的引用。
然后,我构建REST服务,并将.dll与自托管服务一起复制到服务器。
我运行自托管服务。
在我的Android应用程序中,我调用了我的REST服务。REST服务在这一行崩溃:
writeMessage("Creating service reference");
ServiceReference1.BlahImageWarpServiceClient ImgWarpSvc = new ServiceReference1.BlahImageWarpServiceClient();
带有以下错误消息:
在ServiceModel客户端配置中找不到引用约定"ServiceReference1.IBlahImageWarpService"的默认终结点元素部分这可能是因为找不到应用程序的配置文件,或者因为在客户端元素中找不到与此约定匹配的端点元素。
我猜这是另一个配置问题?
我几乎要把这一切都做好了。希望能朝着正确的方向推动或找到解决方案。
非常感谢。
当您调用不接受任何参数的ServiceReference1.BlahImageWarpServiceClient构造函数重载时,WCF将在客户端配置文件的配置部分中查找引用该服务约定的条目。
您可以添加客户端配置部分,也可以将Binding和EndpointAddress对象传递给构造函数。
BasicHttpBinding binding = new BasicHttpBinding();
EndpointAddress address = new EndpointAddress("http://localhost:8080/BlahImageWarp");
var client = new ServiceReference1.BlahImageWarpServiceClient(binding, address);