question

$$ANON_USER$$ avatar image
0 Votes"
$$ANON_USER$$ asked LanHuang-MSFT commented

WCF/WPF Connection via ServiceReference

Hello, somehow i cant add a servicereference to my wpf from my wcf ... please help ... it says something with my metadata isnt working properly

WCF

ISERVICE1
{
[ServiceContract]
public interface IService1
{
[OperationContract]
List<WeatherDataDTO> GetWeatherData(RangeFilter rangeFilter);
}

 [DataContract]
 public class RangeFilter
 {
     [DataMember]
     public string From { get; set; }

     [DataMember]
     public string To { get; set; }

     public RangeFilter() { }

     public RangeFilter(string From, string To)
     {
         this.From = From;
         this.To = To;
     }
 }

 [DataContract]
 public class WeatherDataDTO
 {
     [DataMember]
     public int Id { get; set; }

     // send as string because serialization error with DateTime
     [DataMember]
     public string Date { get; set; }

     [DataMember]
     public string Time { get; set; }

     [DataMember]
     public double Temperature { get; set; }

     [DataMember]
     public int Pressure { get; set; }

     [DataMember]
     public int Rain { get; set; }

     [DataMember]
     public double Wind { get; set; }

     [DataMember]
     public int Direction { get; set; }

     [DataMember]
     public int Humidity { get; set; }
 }



Service1

{
// NOTE: You can use the "Rename" command on the "Refactor" menu to change the class name "Service1" in code, svc and config file together.
// NOTE: In order to launch WCF Test Client for testing this service, please select Service1.svc or Service1.svc.cs at the Solution Explorer and start debugging.
public class Service1 : IService1
{
private TestEntities context = new TestEntities();

     public List<WeatherDataDTO> GetWeatherData(RangeFilter rangeFilter)
     {
         List<WeatherDataDTO> weatherDataDTOs = new List<WeatherDataDTO>();

         var start = parseDateTime(rangeFilter.From);
         var end = parseDateTime(rangeFilter.To);

         var query =
             from weatherData in context.WeatherData
             where weatherData.Datum >= start && weatherData.Datum <= end
             select weatherData;

         var i = 0;

         foreach (var weatherData in query)
         {
             weatherDataDTOs.Add(new WeatherDataDTO
             {
                 Id = weatherData.Id,
                 Date = weatherData.Datum.ToString(),
                 Direction = weatherData.Richtung.Value,
                 Humidity = weatherData.Feuchtigkeit.Value,
                 Pressure = weatherData.Luftdruck.Value,
                 Rain = weatherData.Regen.Value,
                 Temperature = weatherData.Temperatur.Value,
                 Time = weatherData.Zeit.Value.ToString(),
                 Wind = weatherData.Wind.Value
             });

             // Limit because of error: The maximum message size quota for incoming messages (65536) has been exceeded. To increase the quota, use the MaxReceivedMessageSize property on the appropriate binding element.
             if (i == 100)
             {
                 break;
             }
             i++;
         }

         return weatherDataDTOs;
     }

     // parse back string (send as string because serialization error with DateTime)
     private DateTime parseDateTime(string dateString)
     {
         return DateTime.Parse(dateString);
         //var args = datestring.split('.');
         //return new datetime(
         //    convert.toint32(args[0]),
         //    convert.toint32(args[1]),
         //    convert.toint32(args[2])
         //);
     }
 }

}



WPF

 <Grid>
     <DataGrid x:Name="grid" HorizontalAlignment="Left" Height="288" Margin="10,121,0,0" VerticalAlignment="Top" Width="772" AutoGenerateColumns="False">
         <DataGrid.Columns>
             <DataGridTextColumn Binding="{Binding Id}" ClipboardContentBinding="{x:Null}" Header="Id"/>
             <DataGridTextColumn Binding="{Binding Date}" ClipboardContentBinding="{x:Null}" Header="Date"/>
             <DataGridTextColumn Binding="{Binding Time}" ClipboardContentBinding="{x:Null}" Header="Time"/>
             <DataGridTextColumn Binding="{Binding Temperature}" ClipboardContentBinding="{x:Null}" Header="Temperature"/>
             <DataGridTextColumn Binding="{Binding Pressure}" ClipboardContentBinding="{x:Null}" Header="Pressure"/>
             <DataGridTextColumn Binding="{Binding Rain}" ClipboardContentBinding="{x:Null}" Header="Rain"/>
             <DataGridTextColumn Binding="{Binding Wind}" ClipboardContentBinding="{x:Null}" Header="Wind"/>
             <DataGridTextColumn Binding="{Binding Direction}" ClipboardContentBinding="{x:Null}" Header="Direction"/>
             <DataGridTextColumn Binding="{Binding Humidity}" ClipboardContentBinding="{x:Null}" Header="Humidity"/>
         </DataGrid.Columns>
     </DataGrid>
     <Label Content="FROM:" HorizontalAlignment="Left" Margin="10,10,0,0" VerticalAlignment="Top"/>
     <DatePicker x:Name="fromPicker" HorizontalAlignment="Left" VerticalAlignment="Top" Margin="58,11,0,0"/>
     <Label Content="TO:" HorizontalAlignment="Left" Margin="28,41,0,0" VerticalAlignment="Top"/>
     <DatePicker x:Name="toPicker" HorizontalAlignment="Left" VerticalAlignment="Top" Margin="58,40,0,0"/>
     <Button Content="Search" HorizontalAlignment="Left" Margin="10,72,0,0" VerticalAlignment="Top" Width="75" Click="Search_Button_Click"/>

 </Grid>



{
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
private ServiceReference1.IService1 client = new ServiceReference1.Service1Client();

     public MainWindow()
     {
         InitializeComponent();
         init();
     }

     public void init()
     {
         this.fromPicker.SelectedDate = new DateTime(2013, 1, 1);
         this.toPicker.SelectedDate = new DateTime(2013, 1, 1);
         update();
     }

     public void update()
     {
         var from = this.fromPicker.SelectedDate.ToString().Split(' ')[0];
         var to = this.fromPicker.SelectedDate.ToString().Split(' ')[0];

         var filter = new RangeFilter
         {
             From = from,
             To = to
         };

         var data = this.client.GetWeatherData(filter);
         this.grid.ItemsSource = data;
     }

     private void Search_Button_Click(object sender, RoutedEventArgs e)
     {
         update();
     }
 }

}


Java
DataStore

public class DataStore {

 private static DataStore instance;
 private Set<Pupil> pupils = new HashSet<>();

 private DataStore() {

     // Todo: put test data here
     Pupil pupil1 = new Pupil(UUID.randomUUID(), "Tobias", "Emhofer", LocalDate.parse("2002-10-28"), "20170005");
     Pupil pupil2 = new Pupil(UUID.randomUUID(), "Franz", "Fruehwirth", LocalDate.parse("2003-07-09"),"20170000");

     Absence absence1 = new Absence(UUID.randomUUID(), LocalDate.parse("2022-03-10"), LocalDate.parse("2022-03-11"), "Zaz nd",false);
     pupil1.addAbsence(absence1);

     Absence absence2 = new Absence(UUID.randomUUID(), LocalDate.parse("2022-03-13"), LocalDate.parse("2022-03-14"), "a wuascht",false);
     pupil2.addAbsence(absence2);

     pupils.add(pupil1);
     pupils.add(pupil2);

 }


 public void setPupils(Set<Pupil> pupils) {
     this.pupils.addAll(pupils);
 }

 public static DataStore getInstance() {
     if (instance == null) {
         instance = new DataStore();
     }
     return instance;
 }

 public Set<Pupil> getPupils(){
     return pupils;
 }

 public Optional<Pupil> getPupilById2(UUID id) {
     return pupils.stream()
             .filter(pupil -> pupil.getId().equals(id))
             .findFirst();
 }
 public Pupil getPupilById(UUID id) {
     for (Pupil pupil : pupils) {
         if (pupil.getId().equals(id)) {
             return pupil;
         }
     }
     return null;
 }


}


Pupil

public class Pupil {
private UUID id;
private String firstName;
private String lastName;
private LocalDate dateOfBirth;
private String studentNumber;
private Set<Absence> absences = new HashSet<>();


 public Pupil(UUID id, String firstName, String lastName, LocalDate dateOfBirth, String studentNumber) {
     this.id = id;
     this.firstName = firstName;
     this.lastName = lastName;
     this.dateOfBirth = dateOfBirth;
     this.studentNumber = studentNumber;
 }

 public Pupil() {
 }

 public UUID getId() {
     return id;
 }

 public void setId(UUID id) {
     this.id = id;
 }

 public String getFirstName() {
     return firstName;
 }

 public void setFirstName(String firstName) {
     this.firstName = firstName;
 }

 public String getLastName() {
     return lastName;
 }

 public void setLastName(String lastName) {
     this.lastName = lastName;
 }

 public LocalDate getDateOfBirth() {
     return dateOfBirth;
 }

 public void setDateOfBirth(LocalDate dateOfBirth) {
     this.dateOfBirth = dateOfBirth;
 }

 public String getStudentNumber() {
     return studentNumber;
 }

 public void setStudentNumber(String studentNumber) {
     this.studentNumber = studentNumber;
 }

 public Set<Absence> getAbsences() {
     return absences;
 }

 public void setAbsences(Set<Absence> absences) {
     this.absences = absences;
 }

 public void addAbsence(Absence absence) {
     absences.add(absence);
 }


 public Absence getAbsenceById(UUID id) {
     for (Absence absence : absences) {
         if (absence.getId().equals(id)) {
             return absence;
         }
     }
     return null;
 }

 @Override
 public String toString() {
     return "Pupil{" +
             "id=" + id +
             ", firstName='" + firstName + '\'' +
             ", lastName='" + lastName + '\'' +
             ", dateOfBirth=" + dateOfBirth +
             ", studentNumber='" + studentNumber + '\'' +
             ", absences=" + absences +
             '}';
 }

}


Absence


public class Absence {
private UUID id;
private LocalDate from;
private LocalDate to;
private String reason;
private boolean excused;


 public Absence() {
     id = UUID.randomUUID();
 }

 public Absence(UUID id, LocalDate from, LocalDate to, String reason, boolean excused) {
     this.id = id;
     this.from = from;
     this.to = to;
     this.reason = reason;
     this.excused = excused;
 }

 public UUID getId() {
     return id;
 }

 public void setId(UUID id) {
     this.id = id;
 }

 public LocalDate getFrom() {
     return from;
 }

 public void setFrom(LocalDate from) {
     this.from = from;
 }

 public LocalDate getTo() {
     return to;
 }

 public void setTo(LocalDate to) {
     this.to = to;
 }

 public String getReason() {
     return reason;
 }

 public void setReason(String reason) {
     this.reason = reason;
 }

 public boolean isExcused() {
     return excused;
 }

 public void setExcused(boolean excused) {
     this.excused = excused;
 }

 @Override
 public String toString() {
     return "Absence{" +
             "id=" + id +
             ", from=" + from +
             ", to=" + to +
             ", reason='" + reason + '\'' +
             ", excused=" + excused +
             '}';
 }

}


HelloApp

@ApplicationPath("/api")
public class HelloApplication extends Application {

}


PupilResource

@Path("/pupil")
public class PupilResource implements IPupilResource {
DataStore dataStore = DataStore.getInstance();

 @Override
 public Set<Pupil> getAll() {
     return dataStore.getPupils();
 }

 @Override
 public Optional<Pupil> getOnePupil(UUID id) {
     return dataStore.getPupilById2(id);
 }

 @Override
 public Absence newAbsence(String id, Absence absence) {
     DataStore.getInstance().getPupilById(UUID.fromString(id)).addAbsence(absence);
     return DataStore.getInstance().getPupilById(UUID.fromString(id)).getAbsenceById(absence.getId());
 }

 @Override
 public Absence getAbsenceById(String stId, String abId) {
     return DataStore.getInstance().getPupilById(UUID.fromString(stId)).getAbsenceById(UUID.fromString(abId));
 }

 @Override
 public boolean excuseAbsence(String stId, String abId) {
     DataStore.getInstance().getPupilById(UUID.fromString(stId)).getAbsenceById(UUID.fromString(abId)).setExcused(true);
     return DataStore.getInstance().getPupilById(UUID.fromString(stId)).getAbsenceById(UUID.fromString(abId)).isExcused();
 }

}


ImportData

public class ImportData implements IImportData {
@Override
public Set<Pupil> importDataFromJSON(Set<Pupil> pupils) {
DataStore.getInstance().setPupils(pupils);
return DataStore.getInstance().getPupils();
}
}


IPUPILREs

@Path("/pupil")
public interface IPupilResource {
@GET
@Produces(MediaType.APPLICATION_JSON)
Set<Pupil> getAll();

 @GET
 @Produces(MediaType.APPLICATION_JSON)
 @Path("{pupil_id}")
 Optional<Pupil> getOnePupil(@PathParam("pupil_id") UUID id);


 @POST
 @Consumes(MediaType.APPLICATION_JSON)
 @Produces(MediaType.APPLICATION_JSON)
 @Path("/{pupil_id}/absence")
 Absence newAbsence(@PathParam("pupil_id") String id,
                    Absence absence);

 @GET
 @Produces(MediaType.APPLICATION_JSON)
 @Path("/{pupil_id}/absence/{absence_id}")
 Absence getAbsenceById(@PathParam("pupil_id") String stId,
                        @PathParam("absence_id") String abId);


 @PUT
 @Consumes(MediaType.APPLICATION_JSON)
 @Produces(MediaType.APPLICATION_JSON)
 @Path("/{pupil_id}/absence/{absence_id}/excuse")
 boolean excuseAbsence(@PathParam("pupil_id") String stId,
                       @PathParam("absence_id") String abId);

}


IImportData

@Path("/importData")
public interface IImportData {
@POST
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
Set<Pupil> importDataFromJSON(Set<Pupil> pupils);
}


index.jsp

<%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
<!DOCTYPE html>
<html>
<head>
<title>JSP - Hello World</title>
</head>
<body>
<h1><%= "Hello World!" %>
</h1>
<br/>
<a href="${pageContext.request.contextPath}/PupilListServlet">Pupil List</a>
</body>
</html>


PupilServlet
@WebServlet(name = "PupilListServlet", value = "/PupilListServlet")
public class PupilServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setAttribute("pupils", new TrackingClient(DataStore.getInstance().getPupils()));
request.getRequestDispatcher("pupillist.jsp").forward(request,response);
}

 @Override
 protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

 }

}


pupillist.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<jsp:useBean id="pupils" class="com.example.demo.TrackingClient" scope="request"/>
<html>
<head>
<title>Pupil list</title>
</head>
<body>
<form action="${pageContext.request.contextPath}/AbsenceServlet" method="get">
<select name="pupilselect">
<% for (Pupil pupil : pupils.getPupils()) {%>
<option value="<%=pupil.getId()%>"><%=pupil.getFirstName() + " " + pupil.getLastName()%></option>
<%}%>
</select>
<input type="submit" name="Submit">
</form>
</body>
</html>


AbsenceServlet
@WebServlet(name = "AbsenceServlet", value = "/AbsenceServlet")
public class AbsenceServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String s = request.getParameter("pupilselect");
request.setAttribute("a", DataStore.getInstance().getPupilById(UUID.fromString(s)));
request.getRequestDispatcher("absencelist.jsp").forward(request, response);
}

 @Override
 protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

 }

}


absencelist.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<jsp:useBean id="a" class="model.Pupil" scope="request"/>
<html>
<head>
<title>Absence List</title>
</head>
<body>
<table>
<% for (Absence absence : a.getAbsences()) {%>
<tr>
<td><%=absence.toString()%>
</td>
</tr>
<%}%>
</table>
</body>
</html>


Trackingclient
public class TrackingClient {
private Set<Pupil> pupils = new HashSet<>();

 public TrackingClient() {
 }

 public TrackingClient(Set<Pupil> pupils){
     this.pupils = pupils;
 }

 public Set<Pupil> getPupils() {
     return pupils;
 }

 public void setPupils(Set<Pupil> pupils) {
     this.pupils = pupils;
 }

}

windows-wcf
· 1
5 |1600 characters needed characters left characters exceeded

Up to 10 attachments (including images) can be used with a maximum of 3.0 MiB each and 30.0 MiB total.

Hi anonymous user,
Can you provide detailed error information?
There are many reasons why metadata won't work, maybe you can provide your App.config file.
Best regards,
Lan Huang

0 Votes 0 ·

0 Answers