C# Wcf REST服务和客户端

C# Wcf REST服务和客户端,c#,.net,wcf,rest,C#,.net,Wcf,Rest,你好,我搜索了很长时间,但每个答案都没有解决我的问题。我有休息服务 namespace WcfService1 { [ServiceContract] public interface IRestServiceImpl { [OperationContract] [WebInvoke(Method = "GET", ResponseFormat = WebMessageFormat.Xml, BodyStyle = WebMessageBodyS

你好,我搜索了很长时间,但每个答案都没有解决我的问题。我有休息服务

namespace WcfService1
{

[ServiceContract]
public interface IRestServiceImpl
{
    [OperationContract]
    [WebInvoke(Method = "GET",
        ResponseFormat = WebMessageFormat.Xml,
        BodyStyle = WebMessageBodyStyle.Wrapped,
        UriTemplate = "images")]
    List<MyImage> getImages();        
}
[DataContract]
public class MyImage
{
    public MyImage(string name, Image img)
    {
        Name = name;
        Img = img;
    }
    [DataMember]
    public string Name
    {
        get;
        set;
    }
    [DataMember]
    public Image Img
    {
        get;
        set;
    }
}
}
我有例外:

没有可以接受消息的端点正在侦听。这通常是由不正确的地址或SOAP操作引起的。有关更多详细信息,请参阅InnerException(如果存在)

当我调查InnerException时,我发现:

远程服务器返回错误:(404)未找到

以下是我的客户端app.config文件:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
 <system.serviceModel>
  <client>
   <endpoint address="http://localhost:55008/RestServiceImpl.svc" binding="basicHttpBinding" contract="ServiceReference1.IRestServiceImpl">
   </endpoint>
  </client>
  <behaviors>
   <serviceBehaviors>
    <behavior name="ServiceBehaviour">
     <serviceMetadata httpGetEnabled="true"/>
     <serviceDebug includeExceptionDetailInFaults="false"/>
    </behavior>
   </serviceBehaviors>
  </behaviors>
 </system.serviceModel>
</configuration>


我知道这个主题非常流行,但是所有的答案都帮不了我。

从您发布的代码来看,service web.config没有带有BasicHttpBinding的端点。要通过代理使用该服务,我相信您需要根据问题中的client web.config添加一个具有BasicHttpBinding的端点。它确实公开了一个REST端点。要调用REST服务,可以使用如下url调用

http://localhost:55008/RestServiceImpl.svc/images

尝试在客户端代码中添加REST服务的Web引用,而不是服务引用

public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();

        ServiceReference1.RestServiceImplClient service = new ServiceReference1.RestServiceImplClient();

        ServiceReference1.MyImage[] images = service.getImages();
        service.Close();
        List<ServiceReference1.MyImage> files = images.Select(im => new ServiceReference1.MyImage() { Img = im.Img, Name = im.Name }).ToList();

        listViewImages.ItemsSource = files;

    }
}
ServiceReference1.MyImage[] images = service.getImages();
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
 <system.serviceModel>
  <client>
   <endpoint address="http://localhost:55008/RestServiceImpl.svc" binding="basicHttpBinding" contract="ServiceReference1.IRestServiceImpl">
   </endpoint>
  </client>
  <behaviors>
   <serviceBehaviors>
    <behavior name="ServiceBehaviour">
     <serviceMetadata httpGetEnabled="true"/>
     <serviceDebug includeExceptionDetailInFaults="false"/>
    </behavior>
   </serviceBehaviors>
  </behaviors>
 </system.serviceModel>
</configuration>
http://localhost:55008/RestServiceImpl.svc/images